?? оператор в sql - PullRequest
       25

?? оператор в sql

3 голосов
/ 20 октября 2010


У меня есть следующая проблема:
У нас есть этот запрос:

select price*hours as payment from table employees

Теперь, если результат этого умножения равен 0, я бы хотел, чтобы платеж был "x", а не 0.
В переводе на nonsql это будет означать:

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

Есть идеи, как мне реализовать эту команду sql?
Спасибо!

Ответы [ 6 ]

8 голосов
/ 20 октября 2010

Ну, ?? относится к NULL - в этом случае COALESCE или ISNULL - но вы, кажется, имеете в виду 0 - в этом случае просто:

SELECT ...blah...,
       CASE price*hours WHEN 0 THEN 'x' ELSE price*hours END AS [payment]
...more blah...

Однако я бы посоветовал делать это как пользовательский интерфейс, а не в базе данных. Вы также можете подумать о том, как близко к 0 это должно быть (округление с плавающей запятой и т. Д.).

6 голосов
/ 20 октября 2010
SELECT COALESCE(CAST(NULLIF(price * hours, 0) AS VARCHAR), 'x') AS payment_text
  FROM employees;

... но я согласен с @Marc Gravell в том, что этот вид форматирования должен выполняться в 'front end'.

1 голос
/ 20 октября 2010
select payment =
  case price*hours
    when 0 THEN 'x'
    else price*hours
  end
from table employees
1 голос
/ 20 октября 2010

Для решения таких проблем вы можете использовать CASE statemnt

SELECT  payment = CASE
        WHEN price * hours = 0 THEN 'X'
        ELSE price * hours
        END
0 голосов
/ 20 октября 2010

Что ж, вам нужно преобразовать полученное число в строку, иначе произойдет сбой, поскольку "x" не является числом.

Может быть, что-то вроде этого:

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

From dbo.Table
0 голосов
/ 20 октября 2010
CASE
  WHEN somevar = 0 then "x"
  ELSE somevar
  END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...