所以我有一个错误代码,它将日期随机保存在“m-d-yyyy”或“mm-dd-yyyy”或“yyy-mm-dd”或“yyyy-m-d”中。在查询中,如何从该列获取数据,使日期始终为“yyyy-mm-dd”格式?我试过了,但似乎不管用
DATE_FORMAT(c.tx_date, ('%Y-%m-%d')) as tx_date
任何指导都将不胜感激。
dy2hfwbg1#
这是您应该始终以适当的数据类型存储日期和日期时间值的众多原因之一。 DATE_FORMAT() 用于将日期值格式化为字符串,而不是将格式不明确的字符串从一种格式转换为另一种格式。您需要创建一个更复杂的查询来规范化数据。它将涉及检查当前值,然后使用 STR_TO_DATE 使用适当的格式字符串(由上述检查结果确定)。
DATE_FORMAT()
STR_TO_DATE
tcomlyy62#
您可以使用str \u to \u date()作为日期格式()的倒数。看到了吗https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-迄今为止下面是一个将各种格式转换为正确的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 数据类型避免了格式不一致的问题,而且占用的空间更少。
DATE
2条答案
按热度按时间dy2hfwbg1#
这是您应该始终以适当的数据类型存储日期和日期时间值的众多原因之一。
DATE_FORMAT()
用于将日期值格式化为字符串,而不是将格式不明确的字符串从一种格式转换为另一种格式。您需要创建一个更复杂的查询来规范化数据。它将涉及检查当前值,然后使用
STR_TO_DATE
使用适当的格式字符串(由上述检查结果确定)。tcomlyy62#
您可以使用str \u to \u date()作为日期格式()的倒数。看到了吗https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-迄今为止
下面是一个将各种格式转换为正确的yyyy-mm-dd日期值的示例:
应始终避免将日期存储为字符串。使用合适的
DATE
数据类型避免了格式不一致的问题,而且占用的空间更少。