转换具有不同格式的字符串到日期

时间:2012-10-04 19:02:08

标签: mysql sql date-conversion

我有一个包含字符串列( 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

2 个答案:

答案 0 :(得分:5)

有一个技巧可以检测man page上的有效日期。您可以使用它来确定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

为您期望的每个人提供一种格式。像疯了一样测试。

祝你好运。

(哦,祝贺你试图清理一个糟糕的架构!)

答案 1 :(得分:0)

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

否则,我看到的唯一其他选项是开始编写CASE来读取可能的格式,并使用DATE_FORMAT输出。也许是这样的事情:

伪代码(案件可能是1983年12月12日上午12:00)

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, '%....')

您还可以尝试使用REGEXP进行模式匹配。