我有一個表格,它將時間存儲爲一個簡單的varchar,格式看起來像「2012-03-27T03:03:00」。Mysql以這種格式解析日期: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)
我相信這是我的日期格式螺絲了MySQL中,「T」。如果我手動替換一個空間,功能的工作:
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'?
ISO 8601 vs ISO 9075! (這是關於標準的奇妙之處;有很多可供選擇的內容,並且很高興你也沒有處理ISO 9945。) –
[STR_TO_DATE](http://dev.mysql.com/doc/refman/) 5.5/en/date-and-time-functions.html#function_str-date-date) – Wrikken
除了已經提供的答案之外,如果你想讓'HOUR()','MINUTE()'等函數起作用直接在時間字段上,而不必經過'STR_TO_DATE()',你可以通過'UPDATE table SET timefield = REPLACE(timefield,'T','')'將整個表中的'T'解析出來。然後所有的值都變成一個有效的DATETIME字符串。 –