Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите когда использовать ISNULL, а когда COALESCE ? / 10 сообщений из 10, страница 1 из 1
25.12.2019, 11:54
    #39907821
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
сабж
...
Рейтинг: 0 / 0
25.12.2019, 11:56
    #39907823
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
с INSERT INTO понятно ISNULL
...
Рейтинг: 0 / 0
25.12.2019, 12:09
    #39907831
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
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
25.12.2019, 12:12
    #39907832
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
спасибо
а ошибка при SELECT COALESCE(NULL, NULL, NULL)
это требование стандарта?
...
Рейтинг: 0 / 0
25.12.2019, 12:13
    #39907835
listtoview
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
entrypoint,

еще вы упустили что ISNULL приводит типы к первому аргументу
...
Рейтинг: 0 / 0
25.12.2019, 12:39
    #39907850
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
проблема в том, что он не может определить тип данных. Если вы позволите ему это сделать, то все будет ок.
Код: 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
25.12.2019, 14:44
    #39907906
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
Если хотите, чтобы ваш запрос максимально соответствовал стандарту ANSI,
то используйте COALESCE(). ISNULL() - это изобретение Microsoft. Как NVL() - Oracle.
Кроме того, COALESCE принимает любое количество параметров, а ISNULL - 2
...
Рейтинг: 0 / 0
25.12.2019, 14:50
    #39907908
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
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
30.12.2019, 14:46
    #39909882
zindur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
ещё одна проблема 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
30.12.2019, 14:48
    #39909883
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите когда использовать ISNULL, а когда COALESCE ?
cast(null as int). Явно приводить значения к типу - лучшая практика.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите когда использовать ISNULL, а когда COALESCE ? / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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