2013-05-13 33 views
1

我有一個包含日期值格式的varchar字段的mysql表;MySQL使用regexp重新排序字符串?

「日/月/年」

我想重新排列這些字符串值,並創建一個日期時間值或時間戳,所以可通過該列正確排序。我不是正則表達式的專家,但我認爲這可能是前進的方向。

我想以下列格式結束日期表格;

YYYY-MM-DD 00:00:00

I,希望我應該(?),則能夠改變列的數據類型到時間戳或日期時間。

預先感謝任何幫助

+0

在你的用例中,正則表達式不是必需的! – Stephan 2013-05-13 12:37:45

回答

2

你不需要爲這個正則表達式,而且應該儘量避免它給外的開箱即處理這種特定情況下的功能。

請查看MySQL STR_TO_DATE() function

它需要一個字符串str和一個格式字符串格式。 STR_TO_DATE()如果格式字符串包含日期和時間 零件,或如果字符串包含唯一日期 或時間部分一個日期或時間值 返回一個DATETIME值。

SELECT STR_TO_DATE('31/4/2004', '%m/%d/%Y'); 

返回:

'2004-04-31' 

要強制DATETIME,你可以連接一個時間字符串到你的領域的日期字符串的結尾,例如:

SELECT STR_TO_DATE(CONCAT(myDateColumn, ' ', '00:00:00'), '%m/%d/%Y %h:%i:%s'); 
+0

謝謝@Sepster,這非常棒。我不需要連接00部分,因爲它引發了一個錯誤 - 我使用的工作電話是; UPDATE table_name SET start_date = STR_TO_DATE(start_date,'%d /%m /%Y%h:%i:%s')WHERE id> 0; – 2013-05-13 14:00:21

+0

@ChristyHerron絕對是我的榮幸,感謝您花時間回覆/接受。 @ bato3 – Sepster 2013-05-13 14:28:05

-1

你不能使用MySQL的正則表達式,因爲在MySQL正則表達式只允許搜索。

+0

感謝,我不知道這是 – 2013-05-13 14:16:46

+0

你_could_使用它,在理論上,在一系列_update_語句_where_條款的一部分的情況下,但它是複雜而笨重,非常不切實際。否則,可以在用戶定義的函數中使用正則表達式來執行此類任務。根據我的回答,我不會爲@ChristyHerron推薦此功能,因爲目前已有的功能已可用於此功能,但可能有其他(例如非日期,問題/業務域特定)用於基於正則表達式的搜索/替換,例如https ://launchpad.net/mysql-udf-regexp – Sepster 2013-05-13 14:46:20