2012-06-14 52 views
0

我有一個表格,它將時間存儲爲一個簡單的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'?

+1

ISO 8601 vs ISO 9075! (這是關於標準的奇妙之處;有很多可供選擇的內容,並且很高興你也沒有處理ISO 9945。) –

+0

[STR_TO_DATE](http://dev.mysql.com/doc/refman/) 5.5/en/date-and-time-functions.html#function_str-date-date) – Wrikken

+0

除了已經提供的答案之外,如果你想讓'HOUR()','MINUTE()'等函數起作用直接在時間字段上,而不必經過'STR_TO_DATE()',你可以通過'UPDATE table SET timefield = REPLACE(timefield,'T','')'將整個表中的'T'解析出來。然後所有的值都變成一個有效的DATETIME字符串。 –

回答

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')); 
+0

不起作用。原始問題中描述的同樣的問題。 –

+0

運行第二個查詢時得到的兩個警告是什麼? –

0
SELECT HOUR(STR_TO_DATE('2012-03-14T11:28:32','%Y-%m-%dT%k:%i:%s')) 

STR_TO_DATE很漂亮goo d關於像這個非閏年項目這樣的垃圾日期返回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

相關問題