1

我得到了一个数据库,其中包含一个包含属性“数据”(varchar(25))的表。由于糟糕的数据库设计,此列以字符串格式填充日期值,例如:

'2013 年 2 月 25 日下午 3:47'

我需要查询表并按天对所有行进行分组(在上面的示例中为 25)。我应该使用 DATE_FORMAT(datum, '') 函数来做到这一点吗?每当我使用该函数时,我都会得到空值。

4

2 回答 2

2

您是否尝试过STR_TO_DATE()功能(文档)?

它的倒数DATE_FORMAT()将日期值作为其第一个参数,而不是字符串。然后,您可以使用它来获取正确的日期值。

这是一个与您的查询匹配的 SQL 命令,我测试过并且可以工作。

SELECT * 
FROM tablename 
WHERE DATE_FORMAT( STR_TO_DATE(datum,'%M %e, %Y, %h:%i %p'), '%d' ) = 25;
于 2013-02-26T13:46:55.800 回答
2

由于它是一个字符串,因此您应该使用将其转换为有效的日期值STR_TO_DATE

SELECT  *
FROM    tableName
WHERE   STR_TO_DATE(datum,'%M %e, %Y, %h:%i %p') ....

两者的区别:

STR_TO_DATE - 将字符串转换为日期
DATE_FORMAT - 将日期转换为字符串

于 2013-02-26T13:47:02.447 回答