Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 case vs IsNull  [new]
harisma
Member

Откуда:
Сообщений: 243
Насколько "легальным" может быть замена функции isNull в пересислении полей в условии Select запроса на конструкцию case?

Что я имею ввиду:

Было:
select top 100 F1, F2, F3, F4, IsNull(F5, '') as F from sometable where ... order by F desc

Хочу заменить на:
select top 100 F1, F2, F3, F4, case when F5 is NULL then '' else F5 end from sometable where ... order by 5 desc
6 сен 11, 16:45    [11236182]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
harisma
Насколько "легальным" может быть замена функции isNull в пересислении полей в условии Select запроса на конструкцию case?
Вполне нормально.

Ещё можно заменить на COALESCE - она работает намного быстрее обоих вариантов.
6 сен 11, 16:49    [11236213]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
harisma,

это одно и тоже, если результат CASE приведён к типу F5.
См. http://msdn.microsoft.com/ru-ru/library/ms190309(v=SQL.100).aspx

Но зачем Вы выбросили алиас?
6 сен 11, 16:50    [11236222]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
harisma
Member

Откуда:
Сообщений: 243
Ну, тип поля на который я накладываю кейс я знаю на стадии формирования запроса, итак что это не проблема.
А алиас я случайно вытер :)
6 сен 11, 16:52    [11236230]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
alexeyvg
harisma
Насколько "легальным" может быть замена функции isNull в пересислении полей в условии Select запроса на конструкцию case?
Вполне нормально.

Ещё можно заменить на COALESCE - она работает намного быстрее обоих вариантов.
А моя практика показывает, что ISNULL быстрее COALESCE.
Но надо иметь в виду, что COALESCE возвращает результат, приведённый к типу аргумента с наибольшим приоритетом.
А ISNULL всегда приводит тип к типу первого аргумента.

Ну и COALESCE - ANSI стандарт, а ISNULL - расширение стандарта фирмой Microsoft
6 сен 11, 16:53    [11236242]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
iap
alexeyvg
Ещё можно заменить на COALESCE - она работает намного быстрее обоих вариантов.
А моя практика показывает, что ISNULL быстрее COALESCE.
Да народ тут в форуме мерял, получилось в несколько раз... Сам я не повторял.

iap
Но надо иметь в виду, что COALESCE возвращает результат, приведённый к типу аргумента с наибольшим приоритетом.
Да, это важный момент, нужно учитывать...
6 сен 11, 17:33    [11236556]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
harisma
where ... order by 5 desc


Если это F5 - то вполне гуд, если просто 5 - то не нада. :)
6 сен 11, 17:37    [11236613]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SamMan
harisma
where ... order by 5 desc


Если это F5 - то вполне гуд, если просто 5 - то не нада. :)
Судя по всему тут должен быть выброшенный F
6 сен 11, 17:39    [11236635]     Ответить | Цитировать Сообщить модератору
 Re: case vs IsNull  [new]
iljy
Member

Откуда:
Сообщений: 8711
alexeyvg
iap
пропущено...
А моя практика показывает, что ISNULL быстрее COALESCE.
Да народ тут в форуме мерял, получилось в несколько раз... Сам я не повторял.

У меня тоже всегда получалось, что isnull чуть быстрее, как раз за счет того, что coalesce разворачивается в CASE. Но разница не особо существенная.
6 сен 11, 18:44    [11237173]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить