0

我有一个表格,将时间存储为简单的 varchar,格式类似于“2012-03-27T03:03:00”。

我想对这些数据使用 mysql 的日期函数。一些功能工作正常,即

mysql> select year('2012-03-14T11:28:32'), month('2012-03-14T11:28:32');
+-----------------------------+------------------------------+
| year('2012-03-14T11:28:32') | month('2012-03-14T11:28:32') |
+-----------------------------+------------------------------+
|                        2012 |                            3 |
+-----------------------------+------------------------------+
1 row in set (0.00 sec)

但小时和分钟功能失败:

mysql> select hour('2012-03-14T11:28:32'), minute('2012-03-14T11:28:32');
+-----------------------------+-------------------------------+
| hour('2012-03-14T11:28:32') | minute('2012-03-14T11:28:32') |
+-----------------------------+-------------------------------+
|                           0 |                            20 |
+-----------------------------+-------------------------------+
1 row in set, 2 warnings (0.00 sec)

我相信是我的日期格式中的'T'搞砸了mysql。如果我手动将其替换为空格,则这些功能将起作用:

mysql> select hour('2012-03-14 11:28:32'), minute('2012-03-14 11:28:32');
+-----------------------------+-------------------------------+
| hour('2012-03-14 11:28:32') | minute('2012-03-14 11:28:32') |
+-----------------------------+-------------------------------+
|                          11 |                            28 |
+-----------------------------+-------------------------------+
1 row in set (0.00 sec)

有没有一些简单的方法可以告诉mysql解析'T'???

4

2 回答 2

0

那些 MySQL 日期和时间函数(HOUR例如)需要时间戳的特定部分

因此,您需要使用TIMEDATE分别从传递的时间戳中提取时间和日期:

提取时间:

select hour(time('2012-03-14T11:28:32')), minute(time('2012-03-14T11:28:32'));

提取日期:

select year(date('2012-03-14T11:28:32')), month(date('2012-03-14T11:28:32'));
于 2012-06-14T23:03:52.403 回答
0
 SELECT HOUR(STR_TO_DATE('2012-03-14T11:28:32','%Y-%m-%dT%k:%i:%s'))

STR_TO_DATE 对于像这个非闰年项目这样的垃圾日期返回 NULL 非常好。

 SELECT STR_TO_DATE('2011-02-29T11:28:32','%Y-%m-%dT%k:%i:%s')

它还可以让你做一些事情,比如

 SELECT STR_TO_DATE('2011-02-28T11:28:32','%Y-%m-%dT%k:%i:%s') + INTERVAL 1 QUARTER

或者

 SELECT STR_TO_DATE('2011-02-28T11:28:32','%Y-%m-%dT%k:%i:%s') - INTERVAL 35 MINUTE

并让一切正常。

有关转换说明符,请参见此处。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

于 2012-06-14T23:04:26.600 回答