我有一个表,它将时间存储为一个简单的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'???
答案 0 :(得分:0)
那些MySQL日期和时间函数(例如HOUR
)需要时间戳的特定部分。
因此,您需要使用TIME
和DATE
分别从传递的时间戳中提取时间和日期:
提取时间:
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