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

如何编写SQL查询筛选YYYYMMDD格式日期列的当月数据?

筛选当前月份记录的SQL WHERE子句方案

不同数据库的日期函数语法存在差异,下面针对几种常用数据库给出可行的WHERE子句写法:

MySQL/MariaDB

方法1:字符串匹配(直接对比年月前缀)

适合不需要转换日期类型的场景,直接截取Calendar_Day的前6位(YYYYMM格式),和当前年月的格式化字符串对比:

WHERE LEFT(Calendar_Day, 6) = DATE_FORMAT(CURDATE(), '%Y%m')

方法2:日期范围判断(更严谨)

把Calendar_Day转换为日期类型后,判断是否落在当前月份的第一天到次月第一天之间:

WHERE STR_TO_DATE(Calendar_Day, '%Y%m%d') >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
  AND STR_TO_DATE(Calendar_Day, '%Y%m%d') < DATE_ADD(DATE_FORMAT(CURDATE(), '%Y-%m-01'), INTERVAL 1 MONTH)

SQL Server

方法1:字符串匹配

先将Calendar_Day转为字符串,截取前6位后和当前年月的格式化字符串对比:

WHERE LEFT(CAST(Calendar_Day AS VARCHAR(8)), 6) = FORMAT(GETDATE(), 'yyyyMM')

方法2:日期范围判断

转换为日期类型后,用当月第一天和次月第一天做范围筛选:

WHERE CAST(Calendar_Day AS DATE) >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)
  AND CAST(Calendar_Day AS DATE) < DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))

Oracle

方法1:字符串匹配

截取Calendar_Day前6位,和当前系统日期的YYYYMM格式字符串对比:

WHERE SUBSTR(Calendar_Day, 1, 6) = TO_CHAR(SYSDATE, 'YYYYMM')

方法2:日期范围判断

转换为日期类型后,用当月起始日和下月起始日做范围判断:

WHERE TO_DATE(Calendar_Day, 'YYYYMMDD') >= TRUNC(SYSDATE, 'MM')
  AND TO_DATE(Calendar_Day, 'YYYYMMDD') < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1)

你之前用if、concat报错,大概率是没正确结合日期函数生成符合格式的当前年月字符串。比如手动用concat拼接年月时,要确保月份是两位数(如5月需转为05),而直接用数据库自带的日期格式化函数能避免这类格式错误,写法也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:48:11