Может кто-нибудь объяснить, как работает функция COALESCE в TSQL? Синтаксис следующий
КОАЛЕС (x, y)
Документ MSDN по этой функции довольно расплывчатый
sql
sql-server
sql-server-2008
tsql
Ллойд Бэнкс
источник
источник
ISNULL
, это нестандартно, менее гибко, я читал, что он всегда будет возвращать тип данных первого аргумента, а не тип данных возвращаемого значения, как этоCOALESCE
делает.Я не уверен, почему вы думаете, что документация расплывчата.
Он просто просматривает все параметры один за другим и возвращает первый из них
NOT NULL
.Он принимает практически любое количество параметров, но они должны быть одного типа данных. (Если они не одного и того же типа данных, они неявно приводятся к соответствующему типу данных с использованием порядка приоритета типов данных .)
Это похоже
ISNULL()
на несколько параметров, а не только на два.Это также
ANSI-SQL
, где-какISNULL()
нет.источник
ISNULL
возвращает значение с тем же типом данных, что и первый параметр,expressions
, сравнение с CASE, сравнение с ISNULL и, наконец, пример без результата. Затем чрезмерно сложный пример со слишком большим количеством деталей. Когда все, что нам нужно, это ответ с 5-6 строками WTF, эта штука есть и делает.Вот как я смотрю на COALESCE ... и, надеюсь, это имеет смысл ...
В упрощенной форме….
Coalesce (Имя поля, 'Пусто')
Таким образом, это означает… Если «FieldName» равно NULL, заполните значение поля словом «EMPTY».
Теперь о различных ценностях ...
Объединить (ИмяПоля1, ИмяПоля2, Значение2, Значение3)
Если значение в Fieldname1 равно null, заполните его значением в Fieldname2, если FieldName2 равно NULL, заполните его значением Value2 и т. Д.
Этот фрагмент тестового кода для образца базы данных AdventureWorks2012 отлично работает и дает хорошее визуальное объяснение того, как работает COALESCE :
источник
Объединить нужно гораздо больше, чем просто замену ISNULL. Я полностью согласен с тем, что официальная «документация» coalesce расплывчата и бесполезна. Эта статья очень помогает. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
источник
Вот простой запрос, содержащий coalesce -
Он вернет людей, у которых и addressId, и contactId равны null.
функция слияния
например
источник
Самое простое определение функции Coalesce () может быть таким:
Примечание: он оценивает ВСЕ параметры, т.е. не пропускает оценку аргумента (ов) с правой стороны возвращаемого параметра / NOT NULL.
Синтаксис:
Осторожно : кроме аргументов, которые оцениваются как NULL, все остальные (NOT-NULL) аргументы должны иметь один и тот же тип данных или должны иметь совпадающие типы (которые могут быть «неявно автоматически преобразованы» в совместимый тип данных), см. Примеры ниже:
НТН
источник
источник