2009-08-07 25 views
50

Wie würden Sie in T-SQL prüfen, ob eine Zeichenfolge keine andere Zeichenfolge enthält?Überprüfen Sie, ob die Zeichenfolge keine andere Zeichenfolge enthält.

Ich habe eine nvarchar, die "Orangen Äpfel" sein könnte.

Ich würde gerne ein Update machen, wo zum Beispiel eine Spalte nicht enthält "Äpfel" enthalten.

Wie kann das gemacht werden?

WHERE CHARINDEX(N'Apples', someColumn) = 0 

nicht sicher, welches man besser abschneidet - du musst es Test:

+1

Bitte Sei mit deinen Fragetiteln genauer. '" enthält einen anderen String! "=" enthält keinen weiteren String "' – lordcheeto

+0

-1 für ungenauen Titel. –

+1

Ich habe den Titel geändert. Besser spät als nie :) – Dofs

Antwort

75
WHERE NOT (someColumn LIKE '%Apples%') 
+1

Warum habe ich nicht daran gedacht, ich würde für etwas viel fortgeschrittener gehen :) – Dofs

+0

Verwenden Sie einfache Anführungszeichen statt Doppel: '% Äpfel%'. Ich habe versucht, den Beitrag zu bearbeiten, aber SO erfordert Bearbeitungen von sechs Zeichen oder mehr. – DeveloperDan

+0

@DeveloperDan - danke. Fest. –

24

Oder alternativ können Sie diese verwenden! :-)

Marc

UPDATE: die Leistung ziemlich auf einem Niveau mit der anderen Lösung zu sein scheint (WHERE someColumn NOT LIKE ‚% Äpfel%‘) - so es ist wirklich nur eine Frage der persönlichen Präferenz .

+0

Leistung ist nicht so ein großes Problem in meinem Fall. – Dofs

+2

+1: Wenn der zu matchende Text dynamisch ist und nicht eine statische Zeichenfolge wie "Äpfel", dann ist diese Methode besser, da Sie sich keine Gedanken über Platzhalter wie "%" oder "_" machen müssen durch den LIKE-Operator abgeglichen werden. – Joe

+0

@Joe Wenn Sie pedantisch darüber sein wollen, dann würde dieses auch nicht in allen Fällen funktionieren. CHARINDEX unterscheidet nicht zwischen Groß- und Kleinschreibung. Wenn Sie also einen Apfel in einem Apfelfeld suchen, würden Sie die ganze Menge bekommen. Ich weiß, dass es schon ein paar Jahre her ist, dass dies veröffentlicht wurde, aber immer noch. Beide Antworten sind je nach Thema gültig und keine Antwort deckt alle Grundlagen ab. a -1 von dir für die angenommene Antwort scheint nur ein bisschen ... ist pernicky das richtige Wort? – DDuffy

10

verwenden als WHERE-Bedingung

WHERE CHARINDEX('Apples', column) = 0 
7

Die Antworten bekommen Sie statischen Text zu vergleichen, gegen angenommen. Wenn Sie gegen eine andere Spalte vergleichen wollen (sagen wir, Sie Verbinden von zwei Tabellen und wollen diejenigen zu finden, wo eine Spalte aus einer Tabelle Teil einer Spalte aus einer anderen Tabelle ist), können Sie tun, um diese

WHERE NOT (someColumn LIKE '%' || someOtherColumn || '%') 
+1

+1, können Sie auch die NOT LIKE-Syntax verwenden. – Dunc

+2

Funktioniert nicht, wenn someOtherColumn ein Platzhalterzeichen wie '%', '_' enthält. – Joe

Verwandte Themen