我在mysql数据库中有超过5000条记录,其中日期以varchar
格式存储。
示例日期&格式
09-08-2014 dd-mm-yy
4-2-2014 mm-dd-yy
2014-4-4 yy-mm-dd
如何识别每种日期格式并将其更改为通用格式?
我面临的问题是当我运行查询来获取dd-mm-yy时,我也得到了相同的mm-dd-yy值。
答案 0 :(得分:0)
没有规则意味着没有算法。
你提出的问题听起来像是一次性工作,以获得合理的数据。
当您到达存储为varchars的日期时,很多事情可能都是错误的。你提到的和其他一些最差的,比如60/90/2014
但是,关于列的一般规则是其内容是统一的,因此如果您的xx-yy-AAAA
形式的字符串xx
大于12或{{}},则可以使用某些查询进行调查{1}}大于12且假设所有列共享相同的格式。
答案 1 :(得分:0)
对于dd和mm值小于或等于12的mm-dd-yy和dd-mm-yy日期格式,有一种方法,但是含糊不清。
创建表格并插入样本值:
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条记录)
答案 2 :(得分:0)
感谢所有帮助人员
我通过REGEX解决了问题,因为它采用varchar格式。必须为所有可用格式生成正则表达式
使用此正则表达式过滤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/