SELECT top 1
case
when VR = -99999.99
then 0
else cast((VR*1.732) as decimal(38,3))
end
FROM pseb.dbo.datasource
where FeederID=5003
order by datetime desc
以上查询工作正常,但我需要返回varchar值' - '而不是返回0
如果我喜欢那个
SELECT top 1
case
when VR = -99999.99
then '--'
else cast((VR*1.732) as decimal(38,3))
end
FROM pseb.dbo.datasource
where FeederID=5003
order by datetime desc
表示它返回以下错误:
Msg 8114,Level 16,State 5,Line 1转换数据类型varchar时出错 数字。
请帮我解决一下
答案 0 :(得分:5)
问题是您从同一列返回两种不同的数据类型。 SQL Server的规则是数字类型take precedence超过字符串类型,即在类似你的字符串的情况下转换为数字,不是反过来。
因此,要解决此问题,您可以将您的号码转换为字符串。
一种选择是做这样的事情:
SELECT top 1
case when VR = -99999.99 then '--'
else
cast
(
cast((VR*1.732) as decimal(38,3)
)
as varchar(50))
end
FROM pseb.dbo.datasource where FeederID=5003 order by datetime desc