2010-10-20 169 views
3


我有以下問題:
我們有這個疑問:??運營商在SQL

select price*hours as payment from table employees 

現在,如果乘法的結果是0,我想支付爲「X」,而不是0
在nonsql進行翻譯,這將意味着:

(price*hours) != 0 ? (price*hours) : "x" 

任何想法我怎麼能實現這個SQL命令?
謝謝!

+0

你爲什麼要在SQL服務器上而不是在代碼中的某處執行此操作? – R0MANARMY 2010-10-20 11:00:55

+0

我想我現在看到我混亂的原因;注意'x ?? y'(null-coalescing)與'x?是不同的運算符? y:z'(有條件) – 2010-10-20 11:01:57

回答

6
SELECT COALESCE(CAST(NULLIF(price * hours, 0) AS VARCHAR), 'x') AS payment_text 
    FROM employees; 

...但我@Marc Gravell同意這種格式化的,應在「前端」來完成。

+0

+1我是一起使用coalesce和nullif的忠實粉絲! – 2010-10-20 11:07:04

8

好,??將適用於NULL - 在這種情況下COALESCEISNULL - 但你似乎意味着0 - 在這種情況下只是:

​​

不過,我會建議這樣做,作爲一個UI的關注,而比在數據庫中。您可能還想考慮它需要接近0(浮點舍入等)。

+4

+1,用於建議將其放入表示層。 – 2010-10-20 11:00:14

+0

對於我們所知道的,他可能不會有一個表現層... – 2010-10-20 11:06:20

+0

假設'price'和'hours'是數字這個語句將失敗,因爲SQL Server不能將「X」的數量。 – codingbadger 2010-10-20 11:07:33

0
CASE 
    WHEN somevar = 0 then "x" 
    ELSE somevar 
    END 
1

爲了解決這樣的問題,你可以使用CASE statemnt

SELECT payment = CASE 
     WHEN price * hours = 0 THEN 'X' 
     ELSE price * hours 
     END 
1
select payment = 
    case price*hours 
    when 0 THEN 'x' 
    else price*hours 
    end 
from table employees 
0

那麼你就必須得到的數字轉換爲字符串或將失敗,因爲「X」心不是一個號碼。

也許是這樣的:

Select Case 
     When Price * Hours = 0 Then "x" 
     Else Convert(varchar(50), (Price * Hours)) End as "Price" 

From dbo.Table