SQL-сервер простой запрос - PullRequest
1 голос
/ 01 ноября 2010

Как выбрать значение из таблицы, если оно не равно нулю, и выбрать значение по умолчанию, если нет?чтобы получить 'его ноль', поскольку int_id_user равен 0, но возвращает NULL.

Ответы [ 6 ]

1 голос
/ 01 ноября 2010
SELECT  COALESCE(username, 'its null'), COALESCE(user_last_name, 'its also null')
FROM    (
        SELECT  0 AS param
        ) q
LEFT JOIN
        tb_user
ON      int_id_user = param

или, если вам нужно только одно поле,

SELECT  COALESCE
        (
        (
        SELECT  username
        FROM    tb_user
        WHERE   int_id_user = 0
        ),
        'its null'
        )
1 голос
/ 01 ноября 2010

Вы могли бы подумать о том, чтобы выполнить эту конкретную проверку "IS NULL" в клиентском коде стихов SQL, потому что мне это кажется немного хакерским ... но это работает.

Это то, что вы хотели?

В следующем SQL-коде показан один из способов возврата «его нуля», если имя пользователя равно нулю ИЛИ , если для int_id_user не существует строки.

CREATE TABLE #tb_user (
  int_id_user INT NOT NULL PRIMARY KEY,
  username varchar(20) NULL
)
GO

/* returns NO ROWS because #tb_user contains no rows */
select coalesce(username,'its null') from #tb_user where int_id_user = 0
GO

/* returns 'its null' if username IS NULL or int_id_user does not exist in the table */
SELECT COALESCE(
    (select username from #tb_user where int_id_user = 0),
    'its null'
) AS username
GO
1 голос
/ 01 ноября 2010
select isnull(column, 'default value')
from table

текст ссылки

0 голосов
/ 01 ноября 2010

Нет, это не будет работать, если нет возвращаемой строки - isnull и coalesce будут работать, если в строке есть нулевое значение, но для начала должна быть строка. Если строк нет, то ничего не возвращается.

Если вы используете хранимую процедуру, может быть лучше проверить количество строк, возвращаемое запросом, и указать какое-либо значение по умолчанию, когда оно равно нулю.

Также isnull / coalesce должно быть в некотором столбце, а не в целом числе 1.

0 голосов
/ 01 ноября 2010

Если вы используете SQL Server (я не буду говорить о других БД), то это все равно не даст желаемого результата.

Синтаксис:

coalesce(expr1, [expr n,] expr2)

В вашем случае вы говорите "если значение int 1 равно нулю, верните мне текст" не равно нулю "" . Но значение 1 никогда не может быть нулевым, поэтому вы никогда не получите нужный текст.

0 голосов
/ 01 ноября 2010

Телос имеет право. Coalesce работает как isnull для N столбцов.

COALESCE(column1, column2, 'default value')

Это то, что вы хотели бы использовать, если у вас было более одного столбца, чтобы попробовать, прежде чем использовать по умолчанию.

Ваш текущий запрос вернет 1, потому что 1 никогда не будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...