You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL查询当前年份所有月份及对应天数并补全月份前导零

解决方案

1 修正月份为带前导零的两位格式

你当前的实现存在两处问题:

  • 日期转换格式符设置错误:SQL中to_char转换月份时,M格式符输出无前置零的单/双位月份,MM才会输出固定2位带前置零的月份,你之前输出单数字就是格式符选择错误导致的
  • 过滤逻辑不规范:WHERE条件不能直接引用SELECT子句中定义的别名,大部分SQL方言不支持该写法,需要直接对日期字段做年份过滤

修正后的基础查询示例(通用标准SQL写法,适配PostgreSQL/Oracle):

SELECT DISTINCT TO_CHAR(date_column, 'MM') AS month
FROM date_table
WHERE EXTRACT(YEAR FROM date_column) = 2021;

如果使用MySQL,调整为对应语法即可:

SELECT DISTINCT DATE_FORMAT(date_column, '%m') AS month
FROM date_table
WHERE YEAR(date_column) = 2021;

2 查询各月份对应的天数

不同数据库有对应的内置函数可以直接计算当月天数,以下是各主流数据库的实现示例:

PostgreSQL实现

SELECT 
  DISTINCT TO_CHAR(date_column, 'MM') AS month,
  DATE_PART('days', DATE_TRUNC('month', date_column) + INTERVAL '1 month' - INTERVAL '1 day') AS month_days
FROM date_table
WHERE EXTRACT(YEAR FROM date_column) = 2021;

MySQL实现

SELECT 
  DISTINCT DATE_FORMAT(date_column, '%m') AS month,
  DAY(LAST_DAY(date_column)) AS month_days
FROM date_table
WHERE YEAR(date_column) = 2021;

Oracle实现

SELECT 
  DISTINCT TO_CHAR(date_column, 'MM') AS month,
  EXTRACT(DAY FROM LAST_DAY(date_column)) AS month_days
FROM date_table
WHERE EXTRACT(YEAR FROM date_column) = 2021;

如果需要查询当前年份的数据,只需要把过滤条件中的固定年份2021替换为对应数据库的当前年份函数即可:

  • PostgreSQL:EXTRACT(YEAR FROM CURRENT_DATE)
  • MySQL:YEAR(NOW())
  • Oracle:EXTRACT(YEAR FROM SYSDATE)

内容的提问来源于stack exchange,提问作者K4M41D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:04