3

我有一个带有字符串列(varchar(200))的表,其中包含不同格式的日期。例如

may 24 1983 12:00AM
1981-01-13 00:00:00
1979-01-13 00:00:00:123

我想将此列转换为日期以提取年份。我该怎么办?我使用了 STR_TO_DATE 但效果不佳。我必须为每种不同的格式使用 SUBSTRING 吗?

MySQL 版本 5.0.95

4

2 回答 2

5

在手册页上有一个检测有效日期的技巧。您可以使用它来确定STR_TO_DATE格式是否有效。

select foo,
    case when length(date(str_to_date(foo,"%Y-%m-%d %H:%i:%S"))) is not null then str_to_date(foo,"%Y-%m-%d %H:%i:%S")
        when length(date(str_to_date(foo,"%b %d %Y %h:%i%p"))) is not null then str_to_date(foo,"%b %d %Y %h:%i%p")
    end as newdate
from my_table

为您期望的每个人提供一种格式。疯狂地测试。

祝你好运。

(哦,恭喜您尝试清理错误的架构!)

于 2012-10-04T20:03:33.827 回答
0

我会尝试使用服务器端语言(可能是 PHP)来执行此操作,并使用它strotime来生成漂亮的日期。

否则,我看到的唯一其他选择是开始编写CASEs 以读取可能的格式,并使用DATE_FORMAT. 也许是这样的:

伪代码(案例 may 24 1983 12:00AM)

CASE
    WHEN col (after first space is some digit) 
        AND (after second space is 4 digits)
        AND (after third space has 'AM' or 'PM')
    THEN
        DATE_FORMAT(col, '%....')

您也可以尝试使用REGEXPto 进行模式匹配。

于 2012-10-04T19:51:09.303 回答