2013-02-13 32 views
0

我試圖分析在MySQL表中的一些日期,我不能讓STR_TO_DATE很好地發揮:如何忽略MySQL STR_TO_DATE格式字符串中的文本?

SELECT STR_TO_DATE('Tue Feb 12 17:59:59 EET 2013', '%a %b %e %T EET %Y') 

將返回null。

我該如何讓它忽略EET文字?我不需要時區信息。

UPDATE: MySQL服務器版本4.1.14是

+0

上面的查詢工作得很好。 – SparKot 2013-02-13 16:41:51

+0

@DoSparKot無法在4.1.14上工作 – Vlad 2013-02-14 08:22:19

+1

您是否試圖從字符串中刪除'EET'? 'str_to_date(替換(str,'EET',''))' – ravnur 2013-02-14 08:52:20

回答

3

我認爲它只能在5.x上工作(在5.5.x上試過),因爲解析器可以在字符串中跳過匹配的模板,而在4.x中沒有實現。

你可以試試下面的語句,這將是在5.x的罰款4.x中:

SELECT STR_TO_DATE('Tue XX Feb 12 17:59:59 SOME_DATA 2013', '%a XX %b %e %T SOME_DATA %Y') 

所以你能做的最好的事情就是按照你的解決方法(更換不必要的子字符串)。

旁註:MySQL沒有時區的概念。因此,如果初始字符串包含UTC, EET, FET等,MySQL不會在日期轉換期間應用任何更改。

+0

您可以請引用**跳過匹配的模板字符串[..]的文檔沒有在4.x **中實現?我只能找到:[**格式**中的文字字符必須與** str **中的字面字符匹配](https://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions .html#function_str-date) – Vlad 2013-02-14 13:12:45

+0

您的引用引用模式以'%'開頭,但不包含任何其他模式。關於引用:我只能重複一遍,這是我的假設,爲什麼在5.5 MySQL中可以理解某些模式,而在4.x中卻不能。只回答一個問題:如果MySQL不支持時區,MySQL如何處理時區常量(UTC ...)。 – ravnur 2013-02-14 13:23:16

+0

不要誤解我的意思:我想跳過EET,不解析它,所以我不在意數據庫對時區沒有任何意義 - 它只是一個簡單的字符串!您在XX和SOME_DATA上的4.x例子都失敗了。我同意你的看法,它可能是4.x和5.x之間的區別(順便說一句,我知道4。x已經死了),我只是希望它能夠從官方文檔中得到澄清,而不是假設,所以我可以全心全意地接受你的答案。 – Vlad 2013-02-18 15:37:02

-1

由一個%和%B處理您的服務器連接的區域設置管轄日和月的名稱。我從你的名字和時區猜測你有一些本地語言不是'en_US'的用戶,默認和「Tue」和「Feb」的語言。

給這個命令來查看您的區域設置:

SELECT @@lc_time_names; 

你可以嘗試發行

SET lc_time_names = 'en_US'; 

立即發出你的問題多數民衆贊成失敗,命令之前再發行

SET lc_time_names = 'ru_RU'; 

或其他適合您的用戶的信息。

+0

這不是問題,我們使用正確的語言環境和'SELECT STR_TO_DATE('Tue Feb 12 17:59:59 EET 2013','%a%b%e%T')'工作。 – Vlad 2013-02-14 08:19:33