如何在SELECT CASE中获取有条件的小数点数

时间:2013-12-09 17:50:05

标签: sql .net sql-server

它始终返回最大小数位值。在下面的例子中,它总是返回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 

2 个答案:

答案 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
是无用的 因为你有其他情况