none
SQL Statment mit isnull und replace RRS feed

  • 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.

    Mittwoch, 12. Oktober 2011 13:35

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.

    Mittwoch, 12. Oktober 2011 13:40
    Moderator

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.

    Mittwoch, 12. Oktober 2011 13:40
    Moderator
  • 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?

     

     

    Freitag, 14. Oktober 2011 07:34
  • 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

    Freitag, 14. Oktober 2011 08:08
  • 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

    Freitag, 14. Oktober 2011 08:09
    Moderator
  • Hallo azwinzds1,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Donnerstag, 20. Oktober 2011 11:35
    Moderator
  • Hallo,

     

    Sorry, dass ich mich erst jetzt melde aber es ist beantwortet!

    Donnerstag, 20. Oktober 2011 12:48