Mysql以这种格式解析日期:2012-03-27T03:03:00?

时间:2012-06-14 22:46:01

标签: mysql datetime hour

我有一个表,它将时间存储为一个简单的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'???

2 个答案:

答案 0 :(得分: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'));

答案 1 :(得分: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