sql >> Databasteknik >  >> RDS >> Oracle

Hanterar Null i den bästa funktionen i Oracle

Din fråga handlar specifikt om två kolumner, men jag har stött på situationer där jag behövde GREATEST /LEAST med mer än två kolumner. I dessa scenarier kan du använda COALESCE och utöka lösningen till så många kolumner du vill.

Här är ett exempel med tre kolumner a , b och c :

GREATEST(
    COALESCE(a, b, c),
    COALESCE(b, c, a),
    COALESCE(c, a, b)
)

Observera att kolumnordningen för COALESCE ändras så att varje inmatningskolumn är det första elementet COALESCE åtminstone en gång. Den enda gången detta returnerar NULL är när alla inmatningskolumner är NULL.

I den "allmänna lösningen" är antalet COALESCE satser kommer att vara lika med antalet inmatade kolumner:

GREATEST(
    COALESCE(col1, col2, col3, col4, ....),
    COALESCE(col2, col3, col4, ...., col1),
    COALESCE(col3, col4, ...., col1, col2),
    COALESCE(col4, ...., col1, col2, col3),
    COALESCE(...., col1, col2, col3, col4),
    ...
)


  1. Matcha 2 sql-kolumner if =uppdatera sedan en annan kolumn med 1

  2. Hur man felsöker SQL Server T-SQL i Visual Studio 2012

  3. Hur man förbättrar prestanda för SQLite-databas för Android

  4. Vad betyder nyckelordet KEY?