1

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

它有两种格式

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

我想确保它始终以 mysql 日期格式返回。下面的查询将得到第一个。

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}

4

3 回答 3

3
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 ...
于 2013-07-24T09:02:15.573 回答
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
于 2013-07-24T09:02:05.837 回答
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

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

于 2013-07-24T09:01:55.213 回答