我有一个包含字符串列( 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
答案 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
进行模式匹配。