【问题标题】:Mysql. Change date format output on GROUP BY DAY querymysql。更改 GROUP BY DAY 查询的日期格式输出
【发布时间】:2020-06-29 02:10:29
【问题描述】:

我执行这个查询

SELECT * FROM graph WHERE ean IN ('00000000166330') group by DAY(created_at);

得到这些结果:

# id,         ean,       avg_price,       created_at
'58', '00000000166330', '2799.0000', '2020-06-11 16:43:27'

我想更改 created_at 字段返回的日期格式。 我只想获取日期,而不是小时,格式为:日、月、年。

我的猜测是应该使用DATE_FORMAT,但是如何使用呢,也是按天分组的?

Example here

【问题讨论】:

  • 您正在使用group by 而不进行任何聚合。为什么?发布样本数据和预期结果以澄清。
  • DATE_FORMAT(created_at, "%d, %m, %Y) as formated_created_at 添加到您的选择中
  • 示例添加到主帖
  • forpas 如果我有多个同一天的条目,我只想查看一次结果,而不是同一天的所有条目。

标签: mysql


【解决方案1】:
  1. 你没有做任何聚合,所以删除group by
  2. 您可以将运算符 IN 替换为 =,因为您只与 1 个值进行比较
  3. 使用函数DATE() 仅获取created_at 的日期部分

您需要在WHERE 子句中使用相关子查询来获取每天具有最少id 的行(因为返回哪一行并不重要):

SELECT g.id, g.ean, g.avg_price, DATE_FORMAT(g.created_at, '%d-%m-%Y') created_at
FROM graph g
WHERE g.ean = '00000000166330'
AND g.id = (SELECT MIN(id) FROM graph WHERE ean = g.ean AND DATE(created_at) = DATE(g.created_at))

请参阅demo

【讨论】:

  • 但是如果我有几个同一天的整体,我会看到两个,这就是为什么我使用 group by dbfiddle.uk/…
  • 我在您的问题下的评论中要求提供示例数据和预期结果,并且您发布了指向小提琴的链接。为什么您发布的示例数据不代表您的实际数据?
  • 如果你只想要 1 行,你想要哪一行?
  • 每天只有一个没关系。
  • 它可以显示:-每天只有一个结果。 - 只有日期而不是小时。但是,如何更改日期显示的格式?
【解决方案2】:

如果您想要不带聚合函数的不同值,您应该使用 DISTINCT,对于日期,您可以使用 date_format() 函数

SELECT DISTINCT DAY(created_at)
 , date_format(date(created_at),'%d, %m, %Y') , id, avg_price 
FROM graph WHERE ean = '00000000166330';

当您只有一个值时,您应该使用= 而不是IN 运算符。

【讨论】:

  • 通过这个查询,我几乎得到了我想要的:SELECT DISTINCT DAY(created_at), date(created_at), id, avg_price FROM graph WHERE ean = '00000000166330' group by DAY(created_at);但是日期的格式仍然是:年、月、日。我可以把它改成 %d, %m, %Y 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2011-06-25
  • 1970-01-01
相关资源
最近更新 更多