mysql - 如何用SQL查询当年的月份和天数?

标签 mysql sql

我需要一个 2 列 12 行的表作为 MySQL/SQL 查询的结果:

  1. 第一列是当年的 12 个月。
  2. 第二列是每个月的天数。

表格应类似于:

  • 1 月 31 日
  • 2 月 28 日
  • ... ...
  • 12 月 31 日

我尝试过:

DELIMITER $$
 DROP PROCEDURE IF EXISTS my_loop$$
 CREATE PROCEDURE my_loop()
 BEGIN
 DECLARE x INT;

 SET x = 1;

 WHILE x  <= 12 DO
 SELECT monthname(SUBDATE("2019-12-01", INTERVAL x month)) as months, day(LAST_DAY(SUBDATE("2019-12-01", INTERVAL x month))) as days;
 SET  x = x + 1; 
 END WHILE;

 END$$
DELIMITER ;

call my_loop();

但它只打印出第一次迭代:

  • 月日
  • 1 月 31 日

如何在有或没有迭代的情况下解决这个问题?

最佳答案

您可以通过查询来完成此操作:

select monthname(makedate(year(curdate()), 1) + interval (x.mon - 1) month) as month_name,
       day(last_day(makedate(year(curdate()), 1) + interval (x.mon - 1) month)) as days_in_month
from (select 1 as mon union all select 2 union all select 3 union all select 4 union all
      select 5 as mon union all select 6 union all select 7 union all select 8 union all
      select 9 as mon union all select 10 union all select 11 union all select 12 
      ) x
order by x.mon;

Here是一个数据库<> fiddle 。

关于mysql - 如何用SQL查询当年的月份和天数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57459617/

相关文章:

mysql - 在干净的 Ubuntu 12.04.3 LTS 上安装 MySQL 5.5 的问题

mysql - 按日期差异获取相同数字的列表

php - 查找顶级父级(递归)

java - 删除sql不删除

c# - 带有文本框的两个日期之间的 SQL 查询

php - 按 DESC/ASC 排序在 PHP 查询中不起作用

MySql,设置每天的行排名

mysql - 查找给定工作日的最大出现次数

java - 使用列的 IF 更新 SQLite (Android) 中的表

MySQL 查询按字母顺序 A-Z 但 "AA"之后是 "Z"