2017-09-20 2 views
1

Ich teste, ob ein varchar-Feld nicht null oder leer ist. Die Durchführung des Tests mit [field] <>'' scheint gut zu funktionieren, auch wenn der Wert NULL ist.Wird dieser Nullvergleich immer dasselbe Ergebnis liefern?

Aber gibt es Szenarien, in denen dies möglicherweise nicht wie erwartet funktioniert, z. B. unterschiedliche Sortierung oder ANSI NULL-Einstellungen?

Wäre ich sicherer, [field] IS NOT NULL AND [field]<>'' zu verwenden?

+0

Ja, das oder ISNULL ([field], '') <> '' – Tyron78

+0

isnull (Feld, '') <> '' – GuidoG

+0

Es ist immer gute Praxis auf Ihre Anfrage/application/was auch immer sicher machen von jedes Beispiel für "schmutzige Daten". –

Antwort

5

Es gibt wirklich keine Notwendigkeit für eine Ungleichheit prüfen überhaupt (denken Sie daran, dass <> ist nichtSARGabel). Da Sie die Zeilen, die nicht NULL und keine leere Zeichenfolge sind, können Sie dies vereinfachen und Ihre Prädikate SARGable machen.

[field] > '' 
+1

+1 dies. Per Definition muss das [Feld] eine nicht leere Zeichenfolge sein. Diese Antwort verwendet auch Indizes und bietet eine bessere Leistung als jede der anderen hier geposteten Antworten. –

+0

Ausgezeichnet! Ich akzeptiere dies als Antwort, weil es kurz und bündig ist, immer das gewünschte Ergebnis hervorbringen wird, und du hast mir ein neues Wort beigebracht, das ich in der alltäglichen Konversation anwenden werde! – userSteve

+0

Für weitere Details zu SARGability ... https: //en.wikipedia.org/wiki/Sargable Natürlich gibt es noch viele andere, detailliertere Quellen. –

0

Es wäre sicherer, die offizielle Syntax zu verwenden 'IS NULL' OR 'IS NOT NULL'

0

Sie können unter Skript überprüfen:

ISNULL([field], '') <> ''

0

für eine varchar Feld das Kontroll

[field] IS NOT NULL AND [field]<>'' 

kürzer wie diese

erfolgen

Sie tun genau die gleiche Sache

Aber wie Pred in seinem Kommentar erwähnt, könnte es negative Auswirkungen auf die Leistung haben, so die Antwort von Sean besser ist

+0

Kann mit der kürzeren Syntax gemacht werden, aber überprüfen Sie die Ausführungspläne, besonders wenn Sie einen Index für das Feld haben – Pred

+0

@Pred Ich aktualisierte meine Antwort für Ihren Kommentar. – GuidoG

Verwandte Themen