2013-12-09 54 views
0

它始終返回最大小數位值。在下面的例子中,它總是返回4位小數。如何在SELECT CASE中獲得有條件的小數點數

 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

這是因爲'1 = 1'將始終評估爲TRUE; NO NEED ISNULL
是沒用的
:) – Shiva

回答

2

CASE表達式返回一個值和數據類型的所有可能的返回值必須匹配(或可隱式兼容)。

如果您想要條件小數點位置格式,請在客戶端上執行。

-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

請注意在CASE ISNULL THAT ISNULL(CAST(ZZZZ AS FLOAT),-1)
時myvalue的= 1,則不能爲空爲1因爲你有ELSE部分CASE