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

SQL修改日期字段最后两位时varchar转int报错求助

问题排查

报错原因

  • 语法使用错误:IN运算符不支持%通配符匹配,通配符仅可与LIKE运算符配合使用,你当前的where Date in ('%01','%02','%03')写法本身不符合SQL语法规则。
  • 类型不匹配报错:你的Date字段为int类型(存储YYYYMM格式的数值),执行WHERE条件时数据库会自动尝试将'%01'这类带通配符的字符串转为int类型与Date字段匹配,转换失败就会抛出你遇到的Conversion failed when converting the varchar value '%02' to data type int错误。
  • 需求偏离:你当前代码是修改原有Date字段的值,没有新增目标字段FiscalQrtr,不符合生成新列的需求。

正确实现方案

这里提供两种常用实现方式,你可以根据使用场景选择:

方案1:临时表新增字段持久化存储

针对Date为int类型的场景(最常见的YYYYMM存储格式),可以用数学计算直接生成季度值,无需字符串拼接,性能更好:

-- 复制原表同时新增FiscalQrtr列
select *, 
    (Date / 100)*100 + ((Date % 100 -1)/3 +1) as FiscalQrtr
into #claims1 
FROM #claims 

如果Date为varchar类型,使用如下写法:

select *, 
    left(Date,4) + right('0' + cast((cast(right(Date,2) as int) -1)/3 +1 as varchar(2)),2) as FiscalQrtr
into #claims1 
FROM #claims 

方案2:查询时动态生成(无需修改表结构)

如果不需要持久化存储该字段,直接在查询语句中计算即可:

select 
    *,
    (Date / 100)*100 + ((Date % 100 -1)/3 +1) as FiscalQrtr
from #claims

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:03