我正在处理数据,其中我之前的开发人员一直懒惰,并且没有以设置格式存储日期。它作为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}
答案 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
这可以解决您的问题吗?
编辑包括您的默认条件