2010-10-31 3 views
1

Как выбрать значение из таблицы, если это значение не равно нулю, и выберите значение по умолчанию, если не .ie:SQL сервер простой запрос

select coalesce(username,'its null') from tb_user where int_id_user = 0 

Я пытаюсь запустить этот запрос, но не работает, я ожидаю получить его «нуль», поскольку int_id_user равно 0, но возвращает NULL.

+0

Есть ли какие-либо записи для int_id_user где значение равно нулю? –

+0

Нет. Нет. – ozsenegal

+0

Какой вкус SQL вы используете (какая база данных)? – slugster

ответ

1

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

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

Следующая 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 
+0

Лучшее решение для меня. – ozsenegal

1
select isnull(column, 'default value') 
from table 

link text

+0

вот что я код выше ...НЕ работает, он возвращает NULL – ozsenegal

+0

нет, это isnull, а не coalesce ... isnull делает именно то, о чем вы просите. Он проверяет столбец как null, а если он возвращает второй аргумент. – CodeRedick

+0

COALESCE и ISNULL выполняют ту же обязанность; COALESCE - синтаксис ANSI. Прочитайте комментарии в вопросе о том, почему не работает. –

0

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

COALESCE(column1, column2, 'default value') 

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

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

0

Если вы используете SQL Server (я не буду говорить за другие dbs), то это не вернет результат, который вы хотите в любом случае.

синтаксис:

coalesce(expr1, [expr n,] expr2) 

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

+0

COALESCE ANSI, это то же самое во всех базах данных, которые его поддерживают: SQL Server 2000+, Oracle 9i +, MySQL 4 + ... –

+0

Вы правы. код: select coalesce (имя пользователя, 'nulo') из tb_usuario, где int_id_usuario = 0, где username может быть NULL – ozsenegal

0

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

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

Также IsNull/COALESCE будет находиться на некотором столбце, а не целое число 1.

+0

Правильно! Нет строки, возвращаемой. – ozsenegal

1
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' 
     ) 
Смежные вопросы