mysql中有5000多条记录,其中日期以varchar格式存储。
示例日期和格式
09-08-2014 dd-mm-yy
4-2-2014 mm-dd-yy
2014-4-4 yy-mm-dd如何识别每种日期格式并将其更改为通用格式?
我面临的问题是,当我运行一个查询来获取dd时,我也会得到的相同值。
发布于 2014-08-09 06:12:21
谢谢你们的帮助
我通过REGEX解决了这个问题,因为它在varchar format.Had中生成了所有可用格式的regex。
利用该正则表达式对dd/mm/yy -REGEXP‘0-9{2}/0-9{2}/0-9{4}’进行滤波;
参考http://www.tech-recipes.com/rx/484/use-regular-expressions-in-mysql-select-statements/
发布于 2014-08-08 13:07:29
没有规则意味着没有算法。
你所要求的听起来像是一次工作,以获得合理的数据的方式。
当您到达存储为varchars的日期时,许多事情可能是错误的。你提到的那些和其他最糟糕的事情,比如没有像60/90/2014这样的约会
但是,列的一个一般规则是它的内容是一致的,所以如果您有xx-yy-AAAA形式的字符串,其中xx大于12或yy大于12,则可以使用一些查询进行调查,而则假定所有列都共享相同的格式。
发布于 2014-08-08 13:13:11
有一种方法,,但对于mm和dd格式,对于dd和mm值小于或等于12的格式,它是不明确的。
创建表并插入示例值:
create table dates(
stored_date varchar(20)
);
insert into dates (stored_date)
values
('09-08-2014'),
('4-2-2014'),
('2014-4-4');查询提取每一行的日期值:
select stored_date,
case
when date(stored_date) = stored_date then
date(stored_date)
when str_to_date(stored_date,'%d-%m-%Y') is not null then
str_to_date(stored_date,'%d-%m-%Y')
when str_to_date(stored_date,'%m-%d-%Y') is not null then
str_to_date(stored_date,'%m-%d-%Y')
else
null
end as parsed_date
from dates;结果:
+-------------+-------------+
| stored_date | parsed_date |
+-------------+-------------+
| 09-08-2014 | 2014-08-09 |
| 4-2-2014 | 2014-02-04 |
| 2014-4-4 | 2014-04-04 |
+-------------+-------------+您需要手动筛选日期格式,但可能是一些行(而不是5000条记录)。
https://stackoverflow.com/questions/25203741
复制相似问题