Zum Inhalt springen

SQL Server und like Frage


bigpoint

Empfohlene Beiträge

was bedeutet so eine Abfrage

Like ’4[1234]%’

Der gesuchte Wert muss mit 4 beginnern, das 2. Zeichen 1 oder 2 oder 3 oder 4 sein, der Rest ist wurscht.

was bedeutet so eine Abfrage

like ’[89]%’

Der gesuchte Wert muss mit 8 oder 9 beginnen, der Rest ist wurscht.

Schau mal in der Hilfe des Query Analyzers unter LIKE nach.

hth und hollaröhdulljöh

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe ich gekuckt aber leider nichts gefunden :(

vielen dank

Aus besagter Hilfe:

LIKE

Bestimmt, ob die angegebene Zeichenfolge einem angegebenen Muster entspricht. Ein Muster kann normale Zeichen und Platzhalterzeichen einschließen. Bei einem Mustervergleich müssen normale Zeichen exakt mit den angegebenen Zeichen in der Zeichenfolge übereinstimmen. Platzhalterzeichen können jedoch mit beliebigen Teilen der Zeichenfolge übereinstimmen. Das Verwenden der Vergleichsoperatoren für Zeichenfolgen = und != ist nicht so flexibel wie das Verwenden von Platzhalterzeichen mit dem LIKE-Operator. Ist eines der Argumente nicht vom Zeichenfolgen-Datentyp, versucht Microsoft® SQL Serverâ„¢, dieses Argument gegebenenfalls in den Zeichenfolgen-Datentyp zu konvertieren.

Syntax

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Argumente

match_expression

Ein gültiger SQL Server-Ausdruck des Zeichenfolgen-Datentyps.

pattern

Das Muster, das in match_expression gesucht wird. Das Muster kann die folgenden gültigen SQL Server-Platzhalterzeichen einschließen.

Platzhalter Beschreibung Beispiel

% Eine Zeichenfolge aus null oder mehr Zeichen WHERE title LIKE '%Computer%' findet alle Buchtitel, die das Wort 'Computer' enthalten.

_ (Unterstrich) Ein einzelnes Zeichen WHERE au_fname LIKE '_ean' findet alle Vornamen mit vier Buchstaben, die auf ean enden (Dean, Sean usw.).

[ ] Beliebiges einzelnes Zeichen im angegebenen Bereich ([a-f]) oder in der angegebenen Menge ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' findet alle Autorennachnamen, die auf arsen enden und mit einem einzelnen Zeichen zwischen C und P beginnen, z. B.: Carsen, Larsen, Karsen usw.

[^] Beliebiges einzelnes Zeichen, das sich nicht im angegebenen Bereich ([^a-f]) oder in der angegebenen Menge ([^abcdef]) befindet. WHERE au_lname LIKE 'de[^l]%' findet alle Autorennachnamen, die mit de beginnen und deren dritter Buchstabe nicht l ist.

escape_character

Ein beliebiger gültiger SQL Server-Ausdruck eines beliebigen Datentyps aus der Zeichenfolgen-Datentypkategorie. escape_character hat keine Standardeinstellung und darf nur aus genau einem Zeichen bestehen.

Ergebnistypen

Boolesch

Ergebniswert

LIKE gibt TRUE zurück, wenn match_expression dem angegebenen pattern entspricht.

Hinweise

Beim Zeichenfolgenvergleich mit LIKE werden alle in der Musterzeichenfolge vorkommenden Zeichen berücksichtigt, einschließlich führender oder nachfolgender Leerzeichen. Wenn in einer Abfrage LIKE 'abc ' (abc, gefolgt von einem Leerzeichen) verwendet wird, um Zeilen zurückzugeben, die dem Muster abc ähnlich sind, werden keine Zeilen zurückgegeben, die den Wert abc (abc ohne Leerzeichen) enthalten. Nachfolgende Leerzeichen in dem Ausdruck, der mit dem Muster verglichen wird, werden jedoch ignoriert. Wenn in einer Abfrage LIKE 'abc' (abc ohne Leerzeichen) verwendet wird, um Zeilen zurückzugeben, die dem Muster abc ähnlich sind, werden alle Zeilen zurückgegeben, die mit abc anfangen und null oder mehr nachfolgende Leerzeichen enthalten.

Ein Zeichenfolgenvergleich mithilfe eines Musters, das Daten der Typen char und varchar enthält, kann bei einem Vergleich mit dem LIKE-Operator wegen der Art der Datenspeicherung fehlschlagen. Daher ist es wichtig zu verstehen, wie die einzelnen Datentypen gespeichert werden und wann ein Vergleich mit LIKE fehlschlagen kann. Im folgenden Beispiel wird eine lokale char-Variable an eine gespeicherte Prozedur übergeben. Mit einem Mustervergleich sollen dann alle Bücher eines bestimmten Autors gefunden werden. Der Nachname des Autors wird in dieser Prozedur als Variable übergeben.

CREATE PROCEDURE find_books @AU_LNAME char(20)

AS

SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'

SELECT t.title_id, t.title

FROM authors a, titleauthor ta, titles t

WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

AND a.au_lname LIKE @AU_LNAME

Die find_books-Prozedur gibt keine Zeilen zurück, da die char-Variable (@AU_LNAME) immer dann nachfolgende Leerzeichen enthält, wenn der Name weniger als 20 Zeichen enthält. Da die au_lname-Spalte vom Typ varchar ist, sind keine nachfolgenden Leerzeichen vorhanden. Diese Prozedur schlägt fehl, da die nachfolgenden Leerzeichen von Bedeutung sind.

Das folgende Beispiel ist erfolgreich, da nachfolgende Leerzeichen zu einer varchar-Variablen nicht hinzugefügt werden:

USE pubs

GO

CREATE PROCEDURE find_books2 @au_lname varchar(20)

AS

SELECT t.title_id, t.title

FROM authors a, titleauthor ta, titles t

WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id

AND a.au_lname LIKE @au_lname + '%'

EXEC find_books2 'ring'

Im Folgenden wird das Resultset aufgeführt:

title_id title

-------- ---------------------------------------------------------------

MC3021 The Gourmet Microwave

PS2091 Is Anger the Enemy?

PS2091 Is Anger the Enemy?

PS2106 Life Without Fear

(4 row(s) affected)

Mustervergleiche mit LIKE

Bei der Suche nach datetime-Werten wird die Verwendung von LIKE empfohlen, da datetime-Einträge verschiedene Teile eines Datums enthalten können. Wird z. B. der Wert 19981231 9:20 in eine Spalte namens arrival_time eingefügt, kann die Klausel WHERE arrival_time = '9:20' keine exakte Übereinstimmung mit der Zeichenfolge 9:20 finden, da SQL Server den Eintrag in 1998-12-31 09:20:00.000 konvertiert. Eine Übereinstimmung wird jedoch durch die Klausel WHERE arrival_time LIKE '%9:20%' gefunden.

LIKE unterstützt Mustervergleiche im ASCII- und Unicodeformat. Sind alle Argumente (match_expression, pattern und gegebenenfalls escape_character) ASCII-Zeichen, wird ein ASCII-Mustervergleich durchgeführt. Wenn eines der Argumente von einem Unicode-Datentyp ist, werden alle Argumente in Unicode konvertiert und ein Unicode-Mustervergleich durchgeführt. Wenn Sie beim LIKE-Operator Unicode-Daten (nchar- oder nvarchar-Datentypen) verwenden, werden nachfolgende Leerzeichen berücksichtigt. Bei Daten, die nicht vom Typ Unicode sind, werden nachfolgende Leerzeichen ignoriert. Der Unicode-LIKE-Operator ist mit dem SQL-92-Standard kompatibel. Der ASCII-LIKE-Operator ist mit früheren Versionen von SQL Server kompatibel.

Die folgenden Beispiele verdeutlichen die Unterschiede der zurückgegebenen Zeilen beim Durchführen von Mustervergleichen mit ASCII- und Unicode-LIKE-Operatoren:

-- ASCII pattern matching with char column

CREATE TABLE t (col1 char(30))

INSERT INTO t VALUES ('Robert King')

SELECT *

FROM t

WHERE col1 LIKE '% King' -- returns 1 row

-- Unicode pattern matching with nchar column

CREATE TABLE t (col1 nchar(30))

INSERT INTO t VALUES ('Robert King')

SELECT *

FROM t

WHERE col1 LIKE '% King' -- no rows returned

-- Unicode pattern matching with nchar column and RTRIM

CREATE TABLE t (col1 nchar (30))

INSERT INTO t VALUES ('Robert King')

SELECT *

FROM t

WHERE RTRIM(col1) LIKE '% King' -- returns 1 row

Anmerkung Beim Durchführen von Zeichenfolgenvergleichen mit LIKE werden alle Zeichen der Musterzeichenfolge berücksichtigt, einschließlich führender und nachfolgender Leerzeichen.

Verwenden des %-Platzhalterzeichens

Wird bei LIKE beispielsweise 5% angegeben, sucht SQL Server nach der Zahl 5, gefolgt von einer beliebigen Zeichenfolge mit null oder mehr Zeichen.

In der folgenden Abfrage werden z. B. alle Systemtabellen einer Datenbank angezeigt, da alle Namen dieser Tabellen mit den Buchstaben sys beginnen:

SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME LIKE 'sys%'

Anmerkung Bedenken Sie, dass sich Systemtabellen von Version zu Version ändern können. Zum Arbeiten mit SQL Server-Systemtabellen wird die Verwendung von Informationsschemasichten oder entsprechenden gespeicherten Prozeduren empfohlen.

Mit NOT LIKE 'sys%' werden alle Objekte angezeigt, die nicht Systemtabellen sind. Sind insgesamt 32 Objekte vorhanden und LIKE ermittelt 13 dieser Objekte, die dem Muster entsprechen, ermittelt NOT LIKE die 19 Objekte, die dem Muster nicht entsprechen.

Mit einem Muster wie in LIKE '[^s][^y][^s]%' werden möglicherweise nicht immer die gleichen Namen gefunden. Anstelle von 19 Namen werden möglicherweise nur 14 angezeigt, da Namen, die mit s beginnen oder deren zweiter Buchstabe y oder deren dritter Buchstabe s ist, aus dem Resultset ebenso entfernt werden wie die Namen der Systemtabellen. Grund dafür ist die schrittweise Auswertung von Musterzeichenfolgen mit negativen Platzhalterzeichen - es wird Platzhalter für Platzhalter ausgewertet. Wenn der Vergleich an einem beliebigen Punkt der Auswertung fehlschlägt, wird das entsprechende Objekt aus dem Resultset entfernt.

Verwenden von Platzhalterzeichen als Literale

Platzhalterzeichen können auch als Literalzeichen verwendet werden. Um ein Platzhalterzeichen als Literalzeichen zu verwenden, schließen Sie das Platzhalterzeichen in Klammern ein. Die folgende Tabelle enthält einige Beispiele für die Verwendung des LIKE-Schlüsselwortes und der [ ]-Platzhalterzeichen.

Symbol Bedeutung

LIKE '5[%]' 5%

LIKE '[_]n' _n

LIKE '[a-cdf]' a, b, c, d oder f

LIKE '[-acdf]' -, a, c, d oder f

LIKE '[ [ ]' [

LIKE ']' ]

LIKE 'abc[_]d%' abc_d und abc_de

LIKE 'abc[def]' abcd, abce und abcf

... (geht noch weiter)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...