我有下面的查询,根据日期差异计算一定的金额。但是,由于错误,我无法执行查询:
查询:Msg 8114, Level 16, State 5, Line 7
将数据类型varchar转换为数字时出错。
declare @var1 datetime
declare @var2 datetime
set @var1 = '2015-07-14 13:31:43.797'
set @var2 = '2015-07-14 13:31:43.797'
select
'Reefer' =
case
when DATEDIFF (hh,@var1,@var2) <= 6 and DATEDIFF (hh, @var1, @var2) > 0
then 429.000
else
case
when (DATEDIFF (hh,@var1,@var2) % 6) > 0
then 429.00 * ((DATEDIFF (hh,@var1,@var2) / 6)+ 1)
else 'wut'
end
end
from
container con
inner join
containerdetail cod on con.containernumber = cod.containernumber
left join
dea on dea.containernumber = con.containernumber
where
con.billofladingnumber = 'IMPJCP07140003'
不能在CASE
分支中使用多种类型:
编辑else 'wut'
为else 0
您有问题,因为您在THEN
和ELSE
部分上有不同的数据类型,它应该是相同的。您可以通过将INT
数据类型的THEN
部分转换为NVARCHAR()
来修复它:
case
when (DATEDIFF (hh,@var1,@var2) % 6) > 0
then CAST(429.00 * ((DATEDIFF (hh,@var1,@var2) / 6)+ 1) AS VARCHAR(20))
else 'wut'
end
这部分then 429.000
应该转换为NVARCHAR()
:
THEN CAST(429.000 AS NVARCHAR(20))