Server 2005/ 2008
我为一个CASE
查询保留了一个/Numeric条件,这个条件的结果是浮动/Numeric值。CASE
的条件之一是说N/A.我保留了这段代码。
列:Compliance
-可能的值可以是N/A,100.099.1.( nvarchar,float )。
select
x.MemberName, x.DOB, x.FilePath,
x.Medication, x.NDC, x.Directions,
x.Name, x.Strength, x.GenericName,
x.QtyOrdered, x.DaysSupply, x.DateFilled,
CASE WHEN x.test = 0 THEN 'N/A'
WHEN compliance > 100.0 THEN '100.0'
ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1))
END AS [Compliance]
以上语法溢出错误为..。
Msg 8114,16级,状态5,10号线
将数据类型varchar转换为数字时出错。
我应该如何键入这个字段?
发布于 2011-08-24 10:30:16
CASE
是一个表达式,它返回单个结果,而不管它需要的路径是什么,它总是需要得到相同的数据类型(或者隐式地转换到相同的数据类型)。尝试:
...
CASE
WHEN x.test = 0 THEN 'N/A'
WHEN compliance > 100.0 THEN '100.0'
ELSE CONVERT(VARCHAR(5), CAST(FLOOR(compliance *10)/10.0 AS DECIMAL(3,1)))
END AS as [Compliance];
发布于 2011-08-24 10:30:42
在CASE语句中不一致-您需要为所有选项提供与结果相同的数据类型。
CASE WHEN x.test = 0 THEN 'N/A'
WHEN compliance > 100.0 THEN '100.0'
ELSE CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1))
END AS [Compliance]
由于前两个选项返回字符串('N/A'
或'100.0'
),所以最后一个选项还必须返回字符串值:
CASE WHEN x.test = 0 THEN 'N/A'
WHEN compliance > 100.0 THEN '100.0'
ELSE CAST(CAST(FLOOR(compliance * 10)/10.0 AS DECIMAL(3, 1)) AS VARCHAR(20))
END AS [Compliance]
https://stackoverflow.com/questions/7180392
复制