【问题标题】:Mysql GROUP BY DATE from text columnMysql GROUP BY DATE 来自文本列
【发布时间】:2015-11-27 17:06:23
【问题描述】:

我有一个带有文本列的数据库,它将日期和时间存储为 DD/MM/YYYY HH:MM:SS(例如:27-11-2015 17:01:53)。

现在我想用 PHP 做一些统计,但我无法解决日期问题。

我想统计所有具有同一天 (DD/MM/YYYY) 的结果,尽管已创建小时。

我已经尝试了很多解决方案,但没有一个可行。

最好的尝试是这个,但给我 NULL 作为日期:

SELECT STR_TO_DATE(DATECOLUMN, '%d/%m/%Y'), COUNT(*) 
FROM TABLE 
GROUP BY STR_TO_DATE(DATECOLUMN, '%d/%m/%Y')

我也希望基于间隔进行搜索,并且我希望在以这种方式搜索日期间隔时获得一些帮助,因为“正常”方式不起作用。使用下面的代码将无法生成间隔。

WHERE DATE(DATECOLUM) >= DATE(NOW()) - INTERVAL 7 DAY

有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

  • 修复列以正确格式存储日期。当数据库知道正确的存储方式时,不要使用字符串来存储值。
  • 代码已经完成。我真的需要在一堆文件中更改我的代码吗?真的没有办法吗?
  • 您没有义务使用 RDBMS,但看到您似乎想使用一个...
  • 问题是第三方交互将日期读取为 DD/MM/YYYY,所以即使我更改了文件中的日期形式,第三方现在也可以工作,因为我无权访问它。真的没有其他方法可以做到吗?
  • 您的格式 -> DD/MM/YYYY HH:MM:SS 与您的 example: 27-11-2015 17:01:53 不匹配。上次我检查了/!=-

标签: mysql sql date select


【解决方案1】:

你可以试试:

SELECT date_format(str_to_date(DATECOLUMN, '%d/%m/%Y'), '%d/%m/%Y') AS MyDate, COUNT(*)
FROM TABLE 
GROUP BY MyDate

对于区间和组,你可以试试这个:

SELECT COUNT(*), MyDate
FROM TABLE, (
    SELECT date_format(str_to_date(DATECOLUMN, '%d/%m/%Y'), '%d/%m/%Y') AS MyDate
    FROM TABLE) Tmp 
WHERE date_format(str_to_date(MyDate, '%d/%m/%Y'), '%Y-%m-%d') >= NOW() - INTERVAL 7 DAY
GROUP BY MyDate

【讨论】:

  • 并且可以创建一个间隔,例如使用新日期(DD/MM/YYYY)搜索最近 7 天?
  • @Tiago 我添加了另一个查询
  • 由于我的数据信息,我做了一些更改,它就像一个魅力!谢谢!
【解决方案2】:

嗯,

我想我找到了解决方案,而且效果很好。对于那些将来需要它的人:

SELECT DATE_FORMAT(STR_TO_DATE(DATEC_OLUMN , "%d-%m-%Y %H:%i:%S"), "%d/%m/%y") AS date, 
       COUNT(*) 
FROM TABLE_NAME 
GROUP BY DATE_FORMAT(STR_TO_DATE(DATE_COLUMN, "%d-%m-%Y %H:%i:%S"), "%d/%m/%y")

上面的代码会将我在 DD/MM/YYYY HH:MM:SS 中的文本列字符串转换为 DD/MM/YYYY 并将其分组并按日期计数

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多