【问题标题】:Group-by date, given a varchar (string)按日期分组,给定一个 varchar(字符串)
【发布时间】:2013-02-11 23:46:16
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您告诉我们您作为参数传递的格式字符串会有所帮助
  • 我使用了 DATE_FORMAT(datum, '%M %e, %Y, %h:%i %p')

标签: mysql sql date group-by


【解决方案1】:

你试过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;

【讨论】:

  • 我正在尝试下面的示例,使用 STR_TO_DATE()。谢谢!
【解决方案2】:

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

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

两者的区别:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 2019-10-13
    • 1970-01-01
    • 2016-02-12
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多