它始终返回最大小数位值。在下面的例子中,它总是返回4位小数。
SELECT
CASE
WHEN 1 = 1 THEN ISNULL(CAST(1000 AS FLOAT), -1)
WHEN 1 = 2 THEN ISNULL(CAST(0.00400 AS NUMERIC(13, 4)), -1)
ELSE ISNULL(CAST(0.00400 AS NUMERIC(13, 1)), -1) END
答案 0 :(得分:2)
CASE
是一个表达式,只返回一个值,所有可能返回值的数据类型必须匹配(或隐式兼容)。
如果您想要条件小数位格式,请在客户端上进行。
答案 1 :(得分:-1)
你错过了“来源”
SELECT
CASE
WHEN myvalue = 1 THEN ISNULL(CAST(1000 AS FLOAT), -1)
WHEN myvalue = 2 THEN ISNULL(CAST(0.00400 AS NUMERIC(13, 4)), -1)
ELSE ISNULL(CAST(0.00400 AS NUMERIC(13, 1)), -1)
END
from (
select myvalue from (
select 1 as myvalue
union
select 2 as myvalue
union
select 3 as myvalue
union
select null as myvalue
) SourceTable
) MainQueryTable
工作正常
您只能运行此操作以查看必须返回到MainSelect的结果
select myvalue from (
select 1 as myvalue
union
select 2 as myvalue
union
select 3 as myvalue
union
select null as myvalue
) SourceTable
返回:
myvalue的
--------
NULL
1
2
3个
请注意你的CASN ISNULL中的ISNULL(CAST(ZZZZ AS FLOAT),-1)
当myvalue = 1时,不能为空是1无需ISNULL
是无用的
因为你有其他情况