我得到了一个数据库,其中包含一个包含属性“数据”(varchar(25))的表。由于糟糕的数据库设计,此列以字符串格式填充日期值,例如:
'2013 年 2 月 25 日下午 3:47'
我需要查询表并按天对所有行进行分组(在上面的示例中为 25)。我应该使用 DATE_FORMAT(datum, '') 函数来做到这一点吗?每当我使用该函数时,我都会得到空值。
您是否尝试过STR_TO_DATE()
功能(文档)?
它的倒数DATE_FORMAT()
将日期值作为其第一个参数,而不是字符串。然后,您可以使用它来获取正确的日期值。
这是一个与您的查询匹配的 SQL 命令,我测试过并且可以工作。
SELECT *
FROM tablename
WHERE DATE_FORMAT( STR_TO_DATE(datum,'%M %e, %Y, %h:%i %p'), '%d' ) = 25;
由于它是一个字符串,因此您应该使用将其转换为有效的日期值STR_TO_DATE
SELECT *
FROM tableName
WHERE STR_TO_DATE(datum,'%M %e, %Y, %h:%i %p') ....
两者的区别:
STR_TO_DATE - 将字符串转换为日期
DATE_FORMAT - 将日期转换为字符串