确定日期格式09-08-2014

时间:2014-08-08 12:37:58

标签: php mysql date datetime

我在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值。

3 个答案:

答案 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/