无论使用哪一种RDBMS,都需要使用到其中的一些日期转换函数,在使用MySQL的AddDate函数时,遇到了点小问题,稍作记录。

root@localhost:mysql3376.sock  [(none)]>select now() , addtime(now(),'33 0:0:1') ;
+---------------------+---------------------------+
| now() | addtime(now(),'33 0:0:1') |
+---------------------+---------------------------+
| 2017-02-08 11:23:50 | 2017-03-13 11:23:51 |
+---------------------+---------------------------+
1 row in set (0.00 sec) root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'34 0:0:1') ;
+---------------------+---------------------------+
| now() | addtime(now(),'34 0:0:1') |
+---------------------+---------------------------+
| 2017-02-08 11:23:54 | 2017-03-14 11:23:55 |
+---------------------+---------------------------+
1 row in set (0.00 sec) root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'35 0:0:1') ;
+---------------------+---------------------------+
| now() | addtime(now(),'35 0:0:1') |
+---------------------+---------------------------+
| 2017-02-08 11:24:01 | 2017-03-15 10:24:00 |
+---------------------+---------------------------+
1 row in set, 1 warning (0.00 sec) root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'36 0:0:1') ;
+---------------------+---------------------------+
| now() | addtime(now(),'36 0:0:1') |
+---------------------+---------------------------+
| 2017-02-08 11:24:05 | 2017-03-15 10:24:04 |
+---------------------+---------------------------+
1 row in set, 1 warning (0.00 sec)

  仔细一看上文的4条SQL语句,第一句和第二句的结果是结果是正确的,但第三句和第四句的结果并不是期望的结果。

  再仔细一看,第三句和第四句相比于第一句和第二句多输出了一个“1 warning”。来看看warning是提示了什么

root@localhost:mysql3376.sock  [(none)]>show warnings ;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '36 0:0:1' |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)

  warning提示“截断不正确的时间值”。为什么这个时间值不正确呢?

  MySQL官方文档中有说明time值格式的取值说明:

MySQL recognizes TIME values in these formats: 

• As a string in 'D HH:MM:SS' format. You can also use one of the following “relaxed”syntaxes: 'HH:MM:SS', 'HH:MM', 'D HH:MM', 'D HH', or 'SS'. Here D represents days and can have a value from  to . 

• As a string with no delimiters in 'HHMMSS' format, provided that it makes sense as a time. For example, '' is understood as '10:11:12', but '' is illegal (it has a nonsensical minute part) and becomes '00:00:00'.

• As a number in HHMMSS format, provided that it makes sense as a time. For example,  is understood as '10:11:12'. The following alternative formats are also understood: SS, MMSS, or HHMMSS.
 

  总结:

    一、虽然MySQL的官方文档说明了time value中“D”的值只能是从0~34,但没有具体说明原因;

    二、遇到问题,需要仔细查看输出内容,我只是留意到了结果有误,但并没有注意到有warning,还好有高人指点;

  以上,如有错谬,请不吝指正。

MySQL中AddDate函数的疑惑的更多相关文章

  1. thinkphp中的内置操作数据库与mysql中的函数汇总

    8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...

  2. mysql中now()函数的使用,还有oracle的sysdate,可能埋下的坑

    mysql中now()函数的使用,还有oracle的sysdate 在需求中如果系统中药添加当前操作的时间那么很简单的一个操作在写sql的时候直接在这个字段对应的位置写上now()函数就可以了,这样就 ...

  3. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  4. Mysql中的函数

    什么是函数 mysql中的函数与存储过程类似,都是一组SQL集: 与存储过程的区别 函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值: 函数可以嵌入到sql语句中 ...

  5. MySQL中concat函数

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  6. mysql中INSTR函数的用法

    mysql中INSTR函数的用法 INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTo ...

  7. MySQL中group_concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  8. MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

  9. mysql中的函数与存储过程

    mysql中的函数:1 mysql下创建函数: 1.1 语法: delimiter $$ -- 设置分隔符,默认是; 设置成其他符号,让编译器知道我们函数编写的结束,此处设置成$$ create fu ...

随机推荐

  1. Android与MVC设计模式

    写在前面,之前做过一段时间移动开发,后来因为工作原因搁浅了,最新重新拿起Android权威编程指南学习,顺道做个学习笔记. 首先呢,我想说无论是计算机科班出身还是培训班出身,都听说过高内聚低耦合以及M ...

  2. SSH 项目建立过程

    1. 加入 Spring 1). 加入 jar 包 2). 配置 web.xml 文件 <context-param> <param-name>contextConfigLoc ...

  3. 深入剖析PHP输入流 php://input

    另附一个一个连接: http://www.nowamagic.net/academy/detail/12220520 ///////////////////////////////////////// ...

  4. 移动端bug和优化

    1.字体兼容bug 描叙:ios默认字体和andriod不一样,需要设置html的默认字体样式例子:font-family: PingFang-SC-Regular,Helvetica,sans-se ...

  5. vue 调用常量的config.js文件

    我遇到问题,就是有很多常量需要应用的项目里面.所以需要打算设置一个config.js文件 1.填写config.js 文件 //常量配置 //快递公司名单 对应的页面为: src/pages/othe ...

  6. java 简单的des加密示例

    1.加密结果 包含 : 对int加密 .对string加密.对byte[]加密. 10-09 18:33:32.484 7617-7617/com.example.tt.downtest D/Ciph ...

  7. Mastering the Game of Go 论文阅读笔记

    主要思想:用状态评估减少搜索深度,用动作采样减少搜索宽度. 参考文献:https://blog.csdn.net/songrotek/article/details/51065143

  8. 数据库~大叔通过脚本生成poco实体

    今天在做开发时,需要把表映射成实体,又没有EF这种工具,就从网上下了一个工具,但使用时觉得太重了,所以就自己写了一个,基于mysql的. 功能:输入表名,得到这个表的poco实体 SELECT COL ...

  9. ife task0003学习笔记(五):JavaScript面向对象

    JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.在 Java 等面向对象的语言中,this 关键字的含义是明确且具体的,即指代当前对象.而在 JavaScript 中,this ...

  10. 从XCodeGhost事件看软件来源鉴别的重要性

    事件 事件引爆于9月18日乌云网公布的一则分析报告:"XCode编译器里有鬼 – XCodeGhost样本分析",这份纯粹的技术分析报告引发中国iOS生态链的众多开发者的关注. 引 ...