我有以下問題:
我們有這個疑問:??運營商在SQL
select price*hours as payment from table employees
現在,如果乘法的結果是0,我想支付爲「X」,而不是0
在nonsql進行翻譯,這將意味着:
(price*hours) != 0 ? (price*hours) : "x"
任何想法我怎麼能實現這個SQL命令?
謝謝!
我有以下問題:
我們有這個疑問:??運營商在SQL
select price*hours as payment from table employees
現在,如果乘法的結果是0,我想支付爲「X」,而不是0
在nonsql進行翻譯,這將意味着:
(price*hours) != 0 ? (price*hours) : "x"
任何想法我怎麼能實現這個SQL命令?
謝謝!
SELECT COALESCE(CAST(NULLIF(price * hours, 0) AS VARCHAR), 'x') AS payment_text
FROM employees;
...但我@Marc Gravell同意這種格式化的,應在「前端」來完成。
+1我是一起使用coalesce和nullif的忠實粉絲! – 2010-10-20 11:07:04
好,??
將適用於NULL
- 在這種情況下COALESCE
或ISNULL
- 但你似乎意味着0
- 在這種情況下只是:
不過,我會建議這樣做,作爲一個UI的關注,而比在數據庫中。您可能還想考慮它需要接近0(浮點舍入等)。
+1,用於建議將其放入表示層。 – 2010-10-20 11:00:14
對於我們所知道的,他可能不會有一個表現層... – 2010-10-20 11:06:20
假設'price'和'hours'是數字這個語句將失敗,因爲SQL Server不能將「X」的數量。 – codingbadger 2010-10-20 11:07:33
CASE
WHEN somevar = 0 then "x"
ELSE somevar
END
爲了解決這樣的問題,你可以使用CASE statemnt
SELECT payment = CASE
WHEN price * hours = 0 THEN 'X'
ELSE price * hours
END
select payment =
case price*hours
when 0 THEN 'x'
else price*hours
end
from table employees
那麼你就必須得到的數字轉換爲字符串或將失敗,因爲「X」心不是一個號碼。
也許是這樣的:
Select Case
When Price * Hours = 0 Then "x"
Else Convert(varchar(50), (Price * Hours)) End as "Price"
From dbo.Table
你爲什麼要在SQL服務器上而不是在代碼中的某處執行此操作? – R0MANARMY 2010-10-20 11:00:55
我想我現在看到我混亂的原因;注意'x ?? y'(null-coalescing)與'x?是不同的運算符? y:z'(有條件) – 2010-10-20 11:01:57