powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите когда использовать ISNULL, а когда COALESCE ?
10 сообщений из 10, страница 1 из 1
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907821
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сабж
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907823
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с INSERT INTO понятно ISNULL
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907831
entrypoint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
listtoview,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
-- ISNULL выдает первое не NULL значение из двух
SELECT ISNULL(NULL, 2)
SELECT ISNULL(1, NULL)
SELECT ISNULL(1, 2)
-- ISNULL выдает NULL если все два значения NULL
SELECT ISNULL(NULL, NULL)

-- COALESCE выдает первое не NULL значение из списка значений
SELECT COALESCE (NULL, 2, 3)
SELECT COALESCE(1, NULL, 3)
SELECT COALESCE(1, 2, 3)
-- COALESCE падает с ошибкой 
--	   Сообщение 4127, уровень 16, состояние 1, строка 13
--	   Хотя бы один из аргументов COALESCE должен быть выражением, отличным от константы NULL.
-- если все значения списка NULL, т.е.
-- SELECT COALESCE(NULL, NULL, NULL) - не работает

-- Исходя из этого решайте где и что применять 
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907832
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
а ошибка при SELECT COALESCE(NULL, NULL, NULL)
это требование стандарта?
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907835
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
entrypoint,

еще вы упустили что ISNULL приводит типы к первому аргументу
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907850
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема в том, что он не может определить тип данных. Если вы позволите ему это сделать, то все будет ок.
Код: sql
1.
2.
3.
4.
5.
6.
 SELECT NULLIF(COALESCE(NULL, NULL, ISNULL(NULL, 0)), 0)

 DECLARE @D INT = NULL
 SELECT COALESCE(NULL, NULL, @D) 

 SELECT COALESCE(NULL, NULL, CAST(NULL AS INT)) 
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907906
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хотите, чтобы ваш запрос максимально соответствовал стандарту ANSI,
то используйте COALESCE(). ISNULL() - это изобретение Microsoft. Как NVL() - Oracle.
Кроме того, COALESCE принимает любое количество параметров, а ISNULL - 2
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39907908
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoview
entrypoint,

еще вы упустили что ISNULL приводит типы к первому аргументу

А COALESCE, поскольку по сути это не функция, а выражение (expression), аналогичное CASE, опирается на data type precedence:
Код: sql
1.
2.
3.
select
  coalesce(null, 1, getdate()) [coalesce],
  sql_variant_property(coalesce (null, 1, getdate()), 'BaseType') [BaseType]


вернёт

Код: plaintext
1.
2.
3.
coalesce                    BaseType
-----------------------     ---------------
1900-01-02 00:00:00.000     datetime
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39909882
zindur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё одна проблема ISNULL - отсекает строки, когда разные типы, длина

Код: sql
1.
2.
SELECT ISNULL('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABC 
SELECT COALESCE('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABCDEFGHIJ



Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @MyDest AS NVARCHAR(MAX) = 'Some long text, for testing';
DECLARE @MySrc AS NVARCHAR(6) = '';

SELECT @MyDest = ISNULL(NULLIF(@MySrc, N''), @MyDest);

SELECT @MyDest;  -- result: 'Some l'
...
Рейтинг: 0 / 0
Подскажите когда использовать ISNULL, а когда COALESCE ?
    #39909883
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cast(null as int). Явно приводить значения к типу - лучшая практика.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите когда использовать ISNULL, а когда COALESCE ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]