Czy ktoś może wyjaśnić, jak działa funkcja COALESCE w TSQL? Składnia jest następująca
COALESCE (x, y)
Dokument MSDN dotyczący tej funkcji jest dość niejasny
sql
sql-server
sql-server-2008
tsql
Lloyd Banks
źródło
źródło
ISNULL
, nie jest to standardowe, mniej elastyczne, czytałem, że zawsze zwróci typ danych pierwszego argumentu, a nie typ danych zwracanej wartości, jakCOALESCE
robi.Nie jestem pewien, dlaczego uważasz, że dokumentacja jest niejasna.
Po prostu przechodzi przez wszystkie parametry jeden po drugim i zwraca pierwszy, czyli pierwszy
NOT NULL
.Akceptuje prawie dowolną liczbę parametrów, ale powinny one być tego samego typu danych. (Jeśli nie są tego samego typu danych, są niejawnie rzutowane na odpowiedni typ danych przy użyciu kolejności pierwszeństwa typów danych ).
To tak,
ISNULL()
ale dla wielu parametrów, a nie tylko dwóch.Jest także
ANSI-SQL
, gdzie-jakISNULL()
nie jest.źródło
ISNULL
zwraca wartość z tym samym typem danych co pierwszy parametrexpressions
, porównania z CASE, porównania z ISNULL i wreszcie przykład bez wyniku. Następnie zbyt złożony przykład ze zbyt dużą liczbą szczegółów. Kiedy potrzebujemy tylko tej odpowiedzi z 5 - 6 liniami WTF, to jest i robi.Oto sposób, w jaki patrzę na COALESCE ... i mam nadzieję, że ma to sens ...
W uproszczonej formie….
Coalesce (FieldName, „Empty”)
To przekłada się na… Jeśli „FieldName” ma wartość NULL, wypełnij wartość pola słowem „EMPTY”.
Teraz dla wielu wartości ...
Coalesce (FieldName1, FieldName2, Value2, Value3)
Jeśli wartość w polu Fieldname1 jest null, wypełnij ją wartością z pola Fieldname2, jeśli FieldName2 ma wartość NULL, wypełnij ją wartością2 itd.
Ten fragment kodu testowego dla przykładowej bazy danych AdventureWorks2012 działa doskonale i daje dobre wizualne wyjaśnienie, jak działa COALESCE :
źródło
Jest dużo więcej do połączenia niż tylko zamiennik ISNULL. Całkowicie się zgadzam, że oficjalna „dokumentacja” koalescencji jest niejasna i nieprzydatna. Ten artykuł bardzo pomaga. http://www.mssqltips.com/sqlservertip/1521/the-many-uses-of-coalesce-in-sql-server/
źródło
Oto proste zapytanie zawierające coalesce -
Zwróci osoby, w których zarówno addressId, jak i contactId są puste.
funkcja koalescencji
na przykład
źródło
Najprostszą definicją funkcji Coalesce () może być:
Uwaga: oblicza WSZYSTKIE parametry, tj. Nie pomija oceny argumentów po prawej stronie zwracanego parametru / NOT NULL.
Składnia:
Uwaga : poza argumentami, których wynikiem jest NULL, wszystkie inne (NOT-NULL) argumenty muszą być albo tego samego typu danych, albo muszą mieć pasujące typy (które mogą być „niejawnie automatycznie konwertowane” na zgodny typ danych), zobacz przykłady poniżej:
HTH
źródło
źródło