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