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

Varchar年月与Date类型字段对比筛选:日期范围报错修正方案

解决月份日期范围查询的无效日期问题

你的问题出在固定拼接-31作为月末日期,像6月这样只有30天的月份,会生成2022-06-31这种无效日期,导致SQL报错。可以用以下两种可靠的方式修改:

方法一:自动计算月末日期

先把字符串变量转成当月第一天的日期类型,再通过日期函数算出下个月第一天,最后减1天得到正确的月末日期:

declare @date varchar(6)= '202206';
-- 转换为当月第一天的日期
declare @startDate date = cast(left(@date,4) + '-' + right(@date,2) + '-01' as date);
-- 计算当月最后一天:下个月第一天减1天
declare @endDate date = dateadd(day, -1, dateadd(month, 1, @startDate));

select *
from xxx
where [DateTime] between @startDate and @endDate;

方法二:用下个月第一天作为范围上限(更推荐)

不需要计算月末,直接查询日期大于等于当月第一天,且小于下个月第一天的记录。这种方式不仅避免了无效日期问题,还能兼容带时间的datetime类型(不会漏掉23:59:59的记录,也不会包含下个月00:00:00的记录):

declare @date varchar(6)= '202206';
declare @startDate date = cast(left(@date,4) + '-' + right(@date,2) + '-01' as date);
-- 获取下个月第一天
declare @nextMonthStart date = dateadd(month, 1, @startDate);

select *
from xxx
where [DateTime] >= @startDate 
  and [DateTime] < @nextMonthStart;

两种方法都能自动适配不同月份的天数,不会再出现无效日期的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:41:03