SQL-检查哪些年份包含数据

SQL-检查哪些年份包含数据,sql,mysql,Sql,Mysql,如何仅从mysql数据库中选择年份(但仅选择包含数据的年份) 用于填充数据库中的日期。自2006年以来,存储了超过10000条记录 我想按日期对数据进行分类(首先,用户选择年份,然后选择月份,而不是日期…)。我还希望能够使用类似的方法按月和/或天进行选择。查看MySQL提取功能 查看MySQL提取功能 有一些MySQL函数可以从日期中提取年/月/日期信息,但它们使用MySQL的日期类型。因此,首先需要使用FROM\u UNIXTIME(date)将UNIX时间戳转换为日期,然后提取所需的部分信息

如何仅从mysql数据库中选择年份(但仅选择包含数据的年份)

用于填充数据库中的日期。自2006年以来,存储了超过10000条记录


我想按日期对数据进行分类(首先,用户选择年份,然后选择月份,而不是日期…)。我还希望能够使用类似的方法按月和/或天进行选择。

查看MySQL提取功能


查看MySQL提取功能


有一些MySQL函数可以从日期中提取年/月/日期信息,但它们使用MySQL的日期类型。因此,首先需要使用
FROM\u UNIXTIME(date)
将UNIX时间戳转换为日期,然后提取所需的部分信息。有关可用日期函数的列表,请参见。因此,例如,要获得您可以使用的所有年份:

SELECT DISTINCT YEAR(FROM_UNIXTIME(date)) FORM table;
如果以后要筛选实际结果,可以使用此选项获取2009年的所有行:

SELECT ... WHERE YEAR(FROM_UNIXTIME(date)) = 2009
除非您有充分的理由将时间戳存储在数据库中,否则我建议将该列转换为MySQL的
datetime
类型。这将允许您使用索引来加速查询。MySQL无法使用特定函数创建索引,因此您不能在查询中使用
YEAR()
,但您可以这样做,例如:

SELECT ... WHERE date >= 2009 AND date <= 2009;

选择。。。其中date>=2009和date有一些MySQL函数可以从日期中提取年/月/日期信息,但它们使用MySQL的日期类型。因此,首先需要使用
FROM\u UNIXTIME(date)
将UNIX时间戳转换为日期,然后提取所需的部分信息。有关可用日期函数的列表,请参见。因此,例如,要获得您可以使用的所有年份:

SELECT DISTINCT YEAR(FROM_UNIXTIME(date)) FORM table;
如果以后要筛选实际结果,可以使用此选项获取2009年的所有行:

SELECT ... WHERE YEAR(FROM_UNIXTIME(date)) = 2009
除非您有充分的理由将时间戳存储在数据库中,否则我建议将该列转换为MySQL的
datetime
类型。这将允许您使用索引来加速查询。MySQL无法使用特定函数创建索引,因此您不能在查询中使用
YEAR()
,但您可以这样做,例如:

SELECT ... WHERE date >= 2009 AND date <= 2009;
选择。。。其中日期>=2009和日期
如何仅从mysql数据库中选择年份(但仅选择包含数据的年份)

我想按日期对数据进行分类(首先,用户选择年份,然后选择月份,而不是日期…)。我还希望能够使用类似的方法,按月份和/或天数进行选择

请注意,我们在这里使用的条件是可搜索的:
datecolumn
是表达式一侧的唯一内容,可以使用索引来搜索它

如何仅从mysql数据库中选择年份(但仅选择包含数据的年份)

我想按日期对数据进行分类(首先,用户选择年份,然后选择月份,而不是日期…)。我还希望能够使用类似的方法,按月份和/或天数进行选择


请注意,我们在这里使用的条件是可搜索的:
datecolumn
是表达式一侧的唯一内容,可以使用索引来搜索它。

我认为您需要的sql如下所示。我在存储为mysql日期的数据上测试了这些语句,但是from_unixtime应该进行转换,以便其他语句可以按照您的需要工作

-- Get year and counts
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y');

-- Get month/year and counts     
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %Y');

-- Get date and counts
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m%d') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %d, %Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m%d'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %d, %Y');

我想你想要的sql在下面。我在存储为mysql日期的数据上测试了这些语句,但是from_unixtime应该进行转换,以便其他语句可以按照您的需要工作

-- Get year and counts
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y');

-- Get month/year and counts     
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %Y');

-- Get date and counts
SELECT DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m%d') AS raw_date,
       DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %d, %Y') AS format_date,
       COUNT(FROM_UNIXTIME(the_date)) AS num_activities
  FROM date_table
 GROUP BY DATE_FORMAT(FROM_UNIXTIME(the_date), '%Y%m%d'),
          DATE_FORMAT(FROM_UNIXTIME(the_date), '%M %d, %Y');

我编辑了这篇文章。。。数据库中存储的是php time()函数的值,而不是mysql time()(我不知道它的存在:))我的这个替代解决方案并不完美,因为你必须考虑闰年这一复杂的情况我编辑了帖子。。。数据库中存储的是php time()函数的值,而不是mysql time()(我不知道它的存在:))我的这个替代解决方案并不完美,因为你必须考虑闰年这一复杂情况我编辑了我的答案。。。我不知道这个提取函数是否可以处理php time()的格式(11位数字)我编辑了我的答案。。。我不知道这个提取函数是否可以处理php time()的格式(11位数字)。不幸的是,我无法转换当前的日期类型,因为它是一个非常复杂的门户,更改它将是一项艰巨的工作。我会想出其他的解决办法,但将来我会考虑这个办法。谢谢!我刚刚编辑了我的文章,我认为这是最好的解决方案,如果我们考虑到我在mysql中使用UNIX时间戳作为日期格式,我真的不明白这比
SELECT DISTINCT YEAR(FROM_UNIXTIME(date))更好吗FORM table
。我不能使用您建议的解决方案,因为存储在数据库中的时间格式不是mysql日期格式,而是UNIX时间戳。或者我甚至可以将其与unix时间戳一起使用?FROM_UNIXTIME(date)
的整个要点是将日期从unix时间戳转换为常规日期时间。不幸的是,我无法转换当前日期类型,因为它是一个非常复杂的门户,更改它将是一项艰巨的工作。我会想出其他的解决办法,但将来我会考虑这个办法。谢谢!我刚刚编辑了我的文章,我认为这是最好的解决方案,如果我们考虑到我在mysql中使用UNIX时间戳作为日期格式,我真的不明白这比
SELECT DISTINCT YEAR(FROM_UNIXTIME(date))更好吗FORM table
。我不能使用您建议的解决方案,因为存储在数据库中的时间格式不是mysql日期格式,而是UNIX时间戳。或者我甚至可以将其与unix时间戳一起使用?FROM_UNIXTIME(date)
的整个要点是将日期从unix时间戳转换为常规日期时间。