无论使用哪一种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. LeetCode记录之26——Remove Duplicates from Sorted Array

    国外的表达思维跟咱们有很大差别,做这道题的时候很明显.简单说本题就是让你把有序数组中的重复项给换成正常有序的.比如 1 2 2 3换成 1 2 3 3,根本不需要考虑重复的怎么办,怎么删除重复项等等. ...

  2. sharepoint_study_3

    SharePoint网页无法打开 描述:安装部署好SharePoint开发环境后,再修改计算机的机器名,重启计算机后,发现SharePoint网站不能打开. 解决:1.将机器名改回去,重启计算机,问题 ...

  3. MNIST数据集分类简单版本

      import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = ...

  4. 1095 解码PAT准考证 (25 分)

    PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月. ...

  5. Python——爬取瓜子二手车

    # coding:utf8 # author:Jery # datetime:2019/5/1 5:16 # software:PyCharm # function:爬取瓜子二手车 import re ...

  6. JS如何获取屏幕、浏览器及网页高度宽度?

    屏幕的尺寸是指当前分辨率下的高度.宽度,而不是物理高度.宽度. 如:一个22寸的显示器,屏幕分辨率为1366 * 768,那么我们可以获取到的屏幕高度为1366px,宽度为768px. 屏幕宽度和高度 ...

  7. oracle12C--DG搭建配置

    一,主库前期操作 搭建的话和11g差不多,点点点. 两台服务器,一台主库,一台从库 01,配置主库hosts cat /etc/hosts 192.168.0.31 node12c01 192.168 ...

  8. PV和UV代表什么(转)

    PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.  高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面.这 ...

  9. Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的

    转:http://www.cnblogs.com/2gua/ Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法 ...

  10. Guid和Oracle中16进制字符的转换

    我们知道在Oracle中存的guid是16进制字符串,而在我们的C#代码中存的是guid对象,这样我会就要进行转换, 下面给出了两者进行转换的方法: public class Guid2RawProc ...