SQL NVL -Äquivalent - ohne IF/Fallanweisungen & isnull & zusammenwachsen
Frage
Gibt es NVL () gleichwertige Funktionen in SQL?
Oder etwas nah genug, um in bestimmten Szenarien auf die gleiche Weise verwendet zu werden?
AKTUALISIEREN:
Nein, wenn Aussagen
Keine Fallanweisungen
Nein ist nicht
Keine Verschmelzung
select nvl (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
(expression)
SODIUFOSDIUFSDOIFUDSF
1 row(s) retrieved.
select isnull (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
674: Routine (isnull) can not be resolved.
Error in line 1
Near character position 8
select coalesce (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;
674: Routine (coalesce) can not be resolved.
Error in line 1
Near character position 8
select decode(purge_date, NULL, "01/01/2009", purge_date) from id_rec where id=74115;
800: Corresponding types must be compatible in CASE expression.
Error in line 1
Near character position 57
Lösung
Sie scheinen Informix zu verwenden.
Afaik, dort gibt es Dekodien:
DECODE(field, NULL, 'it is null, man', field)
sollte Ihnen das gleiche Ergebnis geben wie NVL(field, 'it is null, man')
Bitte veröffentlichen Sie den genauen Namen und die genaue Version der von Ihnen verwendeten RDBMS.
Andere Tipps
IST NULL (für ein einzelnes Ersatz)
oder
VERSCHMELZEN (Gibt den ersten Nicht -Null -Ausdruck unter seinen Argumenten zurück.)
SQL Server: IsNull oder Koalescehttp://msdn.microsoft.com/en-us/library/ms184325.aspx
Sybase: ISNull -Funktionhttp://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm
Postgres: Ich konnte keinen finden, aber ich habe nicht vollständig überprüft. Schlägt vor, auszuwählen, wo sich null und baut von hier aushttp://archives.postgresql.org/pgsql-sql/1998-06/msg00142.php
DB2 - Vereinthttp://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r000000780.htm
Das Problem mit Ihrer Decode -Anweisung, die den 800 -Fehler generiert, ist einfach. '01/01/2009'
wird als Zeichenfolge behandelt, und es ist eigentlich das 4. Argument, das den Fehler erzeugt.
Schätzen Sie, dass die Eingabe und Ausgabe einer Decodes-Anweisung unterschiedliche Datentypen sein können, sodass die Engine in diesem Fall expliziter sind. (Willst du purge_date
als Zeichenfolge oder String gegossen '01/01/2009'
, oder das String -Argument als Datum oder das ursprüngliche Datum analysiert? Es gibt keine Möglichkeit für den Motor zu wissen.
Versuche dies:
SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)
Sie könnten auch dieses 3. Argument als:
DATE('01/01/2009')
MDY(1,1,2009)
Abhängig von der Version und persönlichen Präferenz.