Benutzer mit den meisten Antworten
SQL Statment mit isnull und replace

Frage
-
Hallo,
In einer SIcht hat ein Kollege (kann ihn leider nicht mehr fragen) diese Case anwisung geschrieben, nur ich versteh nicht warum er die isnull Funktion mit den '' verwendet, bzw. die replache Funktion mit ' ' zum Suchen und zum Ersetzen '' ? Was ist '' bzw. ' ' und warum muß das vermieden werden?
CASE WHEN tSteuerAbgabenNr.UID IS NULL THEN CASE WHEN isnull(tLand.KzUStErmittlung, '') <> 'EU' THEN replace(tSteuerAbgabenNr.LandID, ' ', '')
DatenTyp von KzUStErmittlung und ist varchar
Bei der Tabelle handelt es ich um eine Tabelle auf einen MSSQL 2000 Server.
Antworten
-
Die ISNULL()-Funktion wird verwendet, damit nicht ein Ausdruck wie NULL <> 'EU' zustande kommte, welcher aufgrund der NULL-Behandung eben was anderes ergibt:
IF NULL <> 'EU' SELECT '<>' ELSE SELECT '==' ;
bzw.
DECLARE @Var VARCHAR(2) ; SET @Var = NULL; IF @Var <> 'EU' SELECT '<>' ELSE SELECT '==' ; IF ISNULL(@Var, '') <> 'EU' SELECT '<>' ELSE SELECT '==' ;
Das REPLACE() soll sämtliche Leerzeichen (ASCII 32) entfernen.
- Als Antwort vorgeschlagen Olaf HelperMVP Mittwoch, 12. Oktober 2011 14:48
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Oktober 2011 11:35
Alle Antworten
-
Die ISNULL()-Funktion wird verwendet, damit nicht ein Ausdruck wie NULL <> 'EU' zustande kommte, welcher aufgrund der NULL-Behandung eben was anderes ergibt:
IF NULL <> 'EU' SELECT '<>' ELSE SELECT '==' ;
bzw.
DECLARE @Var VARCHAR(2) ; SET @Var = NULL; IF @Var <> 'EU' SELECT '<>' ELSE SELECT '==' ; IF ISNULL(@Var, '') <> 'EU' SELECT '<>' ELSE SELECT '==' ;
Das REPLACE() soll sämtliche Leerzeichen (ASCII 32) entfernen.
- Als Antwort vorgeschlagen Olaf HelperMVP Mittwoch, 12. Oktober 2011 14:48
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Oktober 2011 11:35
-
Hallo, danke!
Aber: ok damit der Ausdruck @Var <>'EU' funktioniert, ersätzt er NULL mit einen "LeerZeichen", kann das sein? Die '' stehen für Leerzeichen? Aber warum funktioniert NULL<> 'EU' nicht, was sagt die NULL-Behandllung in diesen Fall aus?
-
Aber warum funktioniert NULL<> 'EU' nicht, was sagt die NULL-Behandllung in diesen Fall aus?
Hallo azwinzds1,
NULL ist ein unbestimmter, fehlender Wert. Damit funktioniert der Vergleich nicht, da hier gleiche Datentypen vorausgesetzt werden. NULL ist jedoch keinem Datentyp zugeordnet.
Daher wird über die Funktion ISNULL fehlenden Werten etwas zugeordnet, damit ein Vergleich stattfinden kann. '' ist in diesem Falle eine leere Zeichenfolge welche sich mit 'EU' vergleichen läßt.
Etwas Vorsicht ist bei Zahlen geboten, denn NULL ist definitiv etwas anderes als 0. Die Anweisung ISNULL(intWert, 0) macht nur dann Sinn, denn ich für fehlender Werte den Wert 0 annehme.
Gruß Thomas
-
Du bekommst in diesem Fall ein UNKNOWN als Ergebnis:
Comparison Operators - http://msdn.microsoft.com/en-us/library/ms188074.aspx
Null Values - http://msdn.microsoft.com/en-us/library/ms191504.aspx