我有以下案例陈述,我将日期时间字段转换为YYYYMM,然后再添加1。但数据类型似乎是一个问题。
case when convert(varchar(6), max_bdda_open_dt, 112) <= convert(varchar(6), referral_dt, 112) + 1 then 'Yes' else 'No' end as BDDA_Open
当我删除+1
并将<=
更改为=
时,查询会运行。我尝试将上面的varchar
更改为int
,但我仍然遇到同样的错误。
+1的错误如下。我不确定为什么会这样说&#39; 2014-1&#39;下面。当我单独运行convert语句时,我的日期时间将转换为201401格式。
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '2014-1' to data type int.
答案 0 :(得分:1)
无需先转换为字符串。
case
when cast(max_bdda_open_dt as date) <= dateadd(month, 1, cast(referral_dt as date)) then 'Yes'
else 'No'
end as BDDA_Open
如果两个字段都是数据类型Date
,那么您可以删除强制转换。
答案 1 :(得分:0)
您是否尝试过将这两种转换为int:
转换时的情况(int,convert(varchar(6),max_bdda_open_dt,112))&lt; = convert(int,convert(varchar(6),referral_dt,112))+ 1然后'是'否则'否'结束为BDDA_Open
应该有效