我有以下问题:
我们有这个疑问:??运营商在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