MYSQL 查询哪些年份有记录


MYSQL query which years have records

我有一个带有日期字段的表,我需要找出哪些年份有记录并仅输出年份列表,例如( [2011,2012,2013]),我想象的唯一方法是获取所有行,然后在 php 循环中进行分析。

有没有人知道用纯SQL来实现这一点的方法,或者我必须使用php函数分析数据?

SELECT DISTINCT YEAR(datecolumn) FROM yourtable
  • YEAR() 是一个 MySQL 函数,它将返回与列中存储的当前日期相对应的年份。
  • SELECT DISTINCT 将仅返回 YEAR(datecolumn) 结果的唯一值。可以在本教程中找到更多信息

如果您需要在一个SQL查询中输出列表本身,Linger的答案显然是要走的路。

尝试执行以下操作:

SELECT YEAR(dateColumn)
FROM yourTable
GROUP BY YEAR

您声明您想要一个类似于 [2011,2012,2013] 的列表。 下面的SQL Fiddle演示了如何在一个字段中实现这样的事情:

SELECT CONCAT('[', GROUP_CONCAT(MQ.MyYear), ']') AS YearsList
FROM 
(
  SELECT DISTINCT YEAR(MyDateField) AS MyYear 
  FROM MyTable
) AS MQ

在上面的示例中,我使用子查询来获取在表中找到的所有唯一年份。 然后我用GROUP_CONCAT将它们组合在一起,每年用,分开。 然后我使用 CONCAT 在字符串的前端和结尾添加括号。