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

SQL Server中LIKE搭配DATEADD查询去年数据返回0的问题排查

错误原因
  • 核心问题是你把DATEADD函数直接写在了单引号包裹的字符串常量里,SQL Server不会解析引号内的函数逻辑,只会把DATEADD(year,-1,GETDATE())当成普通的文本字符串去和rdata字段做匹配——只有rdata里真的存了这一长串函数文本才会命中,正常存日期内容的记录不可能符合条件,因此查询匹配不到任何行,SUM聚合返回NULL,最终被ISNULL转换为0。
  • 次要问题:DATEADD(year,-1,GETDATE())本身返回的是上一年的完整日期时间值(例如2024年执行时返回2023-当前月-当前日 当前时分秒),不是单独的4位年份数字,就算把函数放到引号外,不做年份提取和类型转换也无法得到%2023%这类你需要的匹配格式。
修正后代码

你需要先提取上一年的年份值,转为字符串后再和%通配符拼接,逻辑和你最初硬编码'%2021%'的效果完全一致:

SELECT ISNULL(CONVERT(INT, SUM(fi.qtt)), 0)
FROM fi
INNER JOIN st ON st.ref = fi.ref
WHERE rdata LIKE '%' + CONVERT(VARCHAR(4), YEAR(DATEADD(YEAR, -1, GETDATE()))) + '%'

说明:代码里把原来的逗号隐式表连接改成了显式INNER JOIN写法,可读性更强,关联逻辑和你原代码完全一致,不会改变查询结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:39:24