为什么mysql在这个str_to_date()调用中要减去10个小时
mysql版本14.14发行版5.7.28,用于osx10.14(x86_64),使用EditLine包装器为什么mysql在这个str_to_date()调用中要减去10个小时,mysql,Mysql,mysql版本14.14发行版5.7.28,用于osx10.14(x86_64),使用EditLine包装器 mysql> select str_to_date('2019-11-13 09:32:51', '%Y-%m-%D %H:%i:%s'); select str_to_date('2019-11-13 09:32:51', '%Y-%m-%D %H:%i:%s'); +--------------------------------------------------------
mysql> select str_to_date('2019-11-13 09:32:51', '%Y-%m-%D %H:%i:%s');
select str_to_date('2019-11-13 09:32:51', '%Y-%m-%D %H:%i:%s');
+---------------------------------------------------------+
| str_to_date('2019-11-13 09:32:51', '%Y-%m-%D %H:%i:%s') |
+---------------------------------------------------------+
| 2019-11-13 09:32:51 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
那里一切都好。但是
mysql> select str_to_date('2019-11-13 10:32:51', '%Y-%m-%D %H:%i:%s');
select str_to_date('2019-11-13 10:32:51', '%Y-%m-%D %H:%i:%s');
+---------------------------------------------------------+
| str_to_date('2019-11-13 10:32:51', '%Y-%m-%D %H:%i:%s') |
+---------------------------------------------------------+
| 2019-11-13 00:32:51 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
当字符串中的小时数>=10时,转换的日期时间缺少10小时
使用STR_TO_DATE()将starttime字符串转换为MySQL日期时间:
STR_TO_DATE(starttime, '%m-%d-%Y %r')
然后使用TIMEDIFF()减去两次:
select ID,NCOde, TIMEDIFF(ifnull(EndTime,now()), STR_TO_DATE(starttime, '%m-%d-%Y %r'))
from xxx where STR_TO_DATE(starttime,'%m-%d-%Y %r')
between '2012-05-09 00:00:00' and '2012-05-09 23:59:59'
您可能应该考虑将StistTimeStudio的数据类型更改为DATETIME或TIMESTATE。还要注意,这假设EndTime已经是这样的数据类型,否则您也必须对它执行类似的转换
如果starttime和endtime列是MySQL DATETIME数据类型,那么它们必须都是24小时格式的;对于12hr格式的数据类型,它必须是其他数据类型-可能是像VARCHAR这样的字符串类型?如果是这种情况,那么您必须提供适当的格式化字符串作为STR_to_DATE的第二个参数,以便MySQL将字符串解析为如上所示的日期时间(例如,对于24小时时间,使用%T而不是%r) 或 mySQL有DATE_SUB():感谢p.Salmon的评论,正确的表述是:
select str_to_date('2019-11-13 10:32:51', '%Y-%m-%d %H:%i:%s');
+---------------------------------------------------------+
| str_to_date('2019-11-13 10:32:51', '%Y-%m-%d %H:%i:%s') |
+---------------------------------------------------------+
| 2019-11-13 10:32:51 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
这不是问题的答案。也似乎是d的剪切和粘贴,而不是d。有关此功能的参数,请参见手册
select str_to_date('2019-11-13 10:32:51', '%Y-%m-%d %H:%i:%s');
+---------------------------------------------------------+
| str_to_date('2019-11-13 10:32:51', '%Y-%m-%d %H:%i:%s') |
+---------------------------------------------------------+
| 2019-11-13 10:32:51 |
+---------------------------------------------------------+
1 row in set (0.00 sec)