2010-10-20 108 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