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

  1. root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'33 0:0:1') ;
  2. +---------------------+---------------------------+
  3. | now() | addtime(now(),'33 0:0:1') |
  4. +---------------------+---------------------------+
  5. | 2017-02-08 11:23:50 | 2017-03-13 11:23:51 |
  6. +---------------------+---------------------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'34 0:0:1') ;
  10. +---------------------+---------------------------+
  11. | now() | addtime(now(),'34 0:0:1') |
  12. +---------------------+---------------------------+
  13. | 2017-02-08 11:23:54 | 2017-03-14 11:23:55 |
  14. +---------------------+---------------------------+
  15. 1 row in set (0.00 sec)
  16.  
  17. root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'35 0:0:1') ;
  18. +---------------------+---------------------------+
  19. | now() | addtime(now(),'35 0:0:1') |
  20. +---------------------+---------------------------+
  21. | 2017-02-08 11:24:01 | 2017-03-15 10:24:00 |
  22. +---------------------+---------------------------+
  23. 1 row in set, 1 warning (0.00 sec)
  24.  
  25. root@localhost:mysql3376.sock [(none)]>select now() , addtime(now(),'36 0:0:1') ;
  26. +---------------------+---------------------------+
  27. | now() | addtime(now(),'36 0:0:1') |
  28. +---------------------+---------------------------+
  29. | 2017-02-08 11:24:05 | 2017-03-15 10:24:04 |
  30. +---------------------+---------------------------+
  31. 1 row in set, 1 warning (0.00 sec)

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

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

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

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

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

  1. MySQL recognizes TIME values in these formats:
  2.  
  3. As a string in 'D HH:MM:SS' format. You can also use one of the following relaxedsyntaxes: 'HH:MM:SS', 'HH:MM', 'D HH:MM', 'D HH', or 'SS'. Here D represents days and can have a value from to .
  4.  
  5. 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'.
  6.  
  7. 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. [BZOJ 4488][Jsoi2015]最大公约数

    传送门 不知谁说过一句名句,我们要学会复杂度分析 #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for( ...

  2. BZOJ 5168 && Luogu P3740 [HAOI2014]贴海报 线段树~~

    据说某谷数据十分水...但幸好BZOJ上也过了...话说我记得讲课时讲的是奇奇怪怪的离散化..但现在突然觉得什么都可以线段树瞎搞了...QAQ 直接就是这个区间有没有被覆盖,被覆盖直接return: ...

  3. HDU 1232 (畅通工程) 并查集经典模板题

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  4. Oracle PLSQL INDEX BY Binary_Integer 测试

    [转自] http://blog.chinaunix.net/uid-14669803-id-2921539.html DECLARE TYPE t_list_1 IS TABLE OF VARCHA ...

  5. once函数,简约不简单的

    module.exports = once once.proto = once(function () { Object.defineProperty(Function.prototype, 'onc ...

  6. ssh无密码登录和scp无密码拷贝

    目的:在A主机上无密码登录B主机 方法: A主机生成密钥:ssh-keygen -t rsa 将密钥复制到B主机:cat ~/.ssh/id_rsa.pub | ssh root@B 'cat > ...

  7. List<Type> 随机排序

    public List<T> GetRandomList<T>(List<T> inputList){ //Copy to a array T[] copyArra ...

  8. Echart 动态生成series数据

    要做成页面只传入数据,js生成图表,如下图 下面是js代码 var LineChart = function (ID, title, axisData,seriesData) { var myChar ...

  9. Eclipse/Myeclipse/Scala IDEA for Eclipse里两种添加插件的方法(在线和离线)

    不多说,直接上干货! 方法1:在线安装 第一步,在eclipse菜单栏下,选中help ---->Install New Software 第二步,点击图中 add 添加软件下载地址 第三步 , ...

  10. java多线程之线程组与线程池

    看这篇文章:http://blog.csdn.net/zen99t/article/details/50909099