所以我有这个错误的代码,它随机地保存了日期" m-d-yyyy "或" mm-dd-yyyy "或" yyyy-mm-dd "或" yyyy-m-d "。
如何在查询中从此列中获取数据,以便日期始终位于" YYYY-MM-DD"格式?
我已经尝试过了,但它似乎无法正常工作
DATE_FORMAT(c.tx_date, ('%Y-%m-%d')) as tx_date
任何指导都将不胜感激。
答案 0 :(得分:3)
您可以使用STR_TO_DATE()作为DATE_FORMAT()的反转。见https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date
以下是将各种格式转换为正确的YYYY-MM-DD日期值的示例:
SELECT COALESCE(
STR_TO_DATE(c.tx_date, '%c-%e-%Y'),
STR_TO_DATE(c.tx_date, '%m-%d-%Y'),
STR_TO_DATE(c.tx_date, '%Y-%m-%d'),
STR_TO_DATE(c.tx_date, '%Y-%c-%e')) AS tx_date
...
您应始终避免将日期存储为字符串。使用正确的DATE
数据类型可以避免格式不一致的问题,并且占用的空间更少。
答案 1 :(得分:0)
这是您应始终将日期和日期时间值存储在适当数据类型中的众多原因之一。 DATE_FORMAT()
用于将日期值格式化为字符串,而不是将格式错误的字符串从一种格式转换为另一种格式。
您需要创建更复杂的查询来规范化您的数据。它将涉及检查当前值,然后使用STR_TO_DATE
之类的东西和适当的格式化字符串(由上述检查结果确定)。