Sar*_*sam 0 sql sql-server sql-server-2008
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
Run Code Online (Sandbox Code Playgroud)
上面的查询工作正常,但我需要返回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
Run Code Online (Sandbox Code Playgroud)
表示它返回以下错误:
消息8114,级别16,状态5,行1错误将数据类型varchar转换为数字.
请帮我解决一下
问题是您从同一列返回两种不同的数据类型.SQL Server的规则,数字类型优先于字符串类型,即在像你这样的情况下,字符串被转换为数字,而不是相反.
因此,要解决此问题,您可以将数字转换为字符串.
一种选择是做这样的事情:
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
Run Code Online (Sandbox Code Playgroud)