Mysql - 存储多个不正确的日期格式

时间:2013-07-24 08:56:09

标签: mysql date date-format

我正在处理数据,其中我之前的开发人员一直懒惰,并且没有以设置格式存储日期。它作为varchar而不是日期时间。不用说它让我需要对数据进行排序。

它有两种格式

1) {dd}/{mm}/{yyyy} {hh}:{mm}
2) {dd}.{mm}.{yyyy} {hh}:{mm}

我想确保它总是在mysql dateformat中返回。下面的查询将获得第一个。

SELECT 
  str_to_date( a.rentalstart, '%d/%m/%Y %k:%i' ),
  a.* 
FROM 
  jupiter1.table a
ORDER by createtime DESC

我如何将两者结合起来?如果匹配,我还需要默认为正常的mysql日期时间。

{yyyy}-{mm}-{dd} {hh}:{mm}:{ss}

3 个答案:

答案 0 :(得分:2)

SELECT CASE WHEN a.rentalstart LIKE "%/%/% %:%"
            THEN str_to_date( a.rentalstart, '%d/%m/%Y %k:%i' )
            WHEN a.rentalstart LIKE "%.%.% %:%"
            THEN str_to_date( a.rentalstart, '%d.%m.%Y %k:%i' )
            ELSE CAST(a.rentalstart AS DATETIME)
       END AS rentalstart_good,
       a.*
FROM ...

答案 1 :(得分:1)

你可以简单地做REPLACE。它将以{dd}.{mm}.{yyyy} {hh}:{mm}格式转换所有记录,并将其转换为DateTime数据类型。

SELECT  STR_TO_DATE(REPLACE(a.rentalstart, '/', '.'), '%d.%m.%Y %k:%i') newDate,
        a.*
FROM    jupiter1.table a
ORDER   BY newDate DESC

答案 2 :(得分:0)

SELECT 
  str_to_date( replace(replace(a.rentalstart, '.', '-'), '/', '-'), if(a.rentalstart like '%-%-%-%', '%Y-%m-%d %k:%i', '%d-%m-%Y %k:%i' )),
  a.* 
FROM 
  jupiter1.table a
ORDER by createtime DESC

这可以解决您的问题吗?
编辑包括您的默认条件