SQL Server日期时间操作



我有下面的查询,根据日期差异计算一定的金额。但是,由于错误,我无法执行查询:

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

您有问题,因为您在THENELSE部分上有不同的数据类型,它应该是相同的。您可以通过将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))

相关内容

  • 没有找到相关文章

最新更新