netzheimer
Goto Top

MSSQL Server - Suche nach Bezeichnungen mit Unterstrich im Namen

Auf Grund der Herstellervorgaben einer eingesetzten Software haben wir eine Schreibweise mit Unterstrich wählen müssen. Dies ist bei der Suche nicht immer hilfreich. Dieses kleine Workaround hat mich vermutlich wieder 67 Haare gekostet aber es funktioniert.

Da der Unterstrich in MSSQL eigentlich ein Platzhalter für ein beliebiges Zeichen ist, ist es nur über einen kleinen Umweg möglich dies als Zeichen abzufragen:

declare @searchvar nvarchar(255)
set @searchvar = char(0x5F)+'beliebiger Text'+char(0x5F) -- char(0x5F) = Unterstrich

select * from sys.objects
where CHARINDEX(@searchVar, [name]) > 0;

Die Funktion CHARINDEX gibt die Position des Auftretens des gesuchten Patterns, in diesem Fall _beliebigerText_, zurück.

Content-Key: 120923

Url: https://administrator.de/contentid/120923

Printed on: April 23, 2024 at 10:04 o'clock

Member: -ricardo-
-ricardo- Jul 21, 2009 at 11:49:09 (UTC)
Goto Top
Hi
Nimm doch

LIKE "%_%"
Member: Netzheimer
Netzheimer Jul 22, 2009 at 07:32:34 (UTC)
Goto Top
Hallo.

dein Vorschlag heißt ausgesprochen:
LIKE 'beliebigeAnzahlZeichen-Genau1beliebigesZeichen-beliebigeAnzahlZeichen'

Das kann man kürzen auf LIKE '%' und damit habe ich alles, zwar auch die mit Unterstrich, jedoch auch alle anderen.

Der Unterstrich wird in deiner Version behandelt wie es vorgesehen ist, nämlich als Platzhalter für 1 Zeichen. Nach dem Unterstrich selbst kannst du so nicht suchen.

Gruß
Netzheimer
Member: -ricardo-
-ricardo- Jul 22, 2009 at 07:46:53 (UTC)
Goto Top
Stimmt ist ja als Platzhalter :D

Dann ein \ davor dann ....LIKE '%\_%' ....dann müsste das nicht als Wildcard gelten ... habe es aber nicht getestet
Member: Netzheimer
Netzheimer Jul 22, 2009 at 11:29:15 (UTC)
Goto Top
MSSQL hat keine Escape-Sequenzen.

Wir bewegen uns im Bereich Visual-Studio und MSSQL - nicht in anderen Programmiersprachen.

Netzheimer
Member: Biber
Biber Jul 23, 2009 at 11:47:12 (UTC)
Goto Top
Moin Netzheimer und -ricardo-,

wenn ich auch mal kurz kommentieren kann:

@-ricardo
Nimm doch
LIKE "%_%"
Und das klappt sogar bei MSSQL's ungeliebtem Cousin M$-Access.

Dort führt ein ...WHERE feld LIKE "*_*" in der Tat zum "richtigen" Ergebnis.
Aber was versteht Access auch schon von SQL?

@Netzheimer
MSSQL hat keine Escape-Sequenzen.
So schlecht rede nicht ich mal ich über die Redmonder...

Bei MSSQL werden Wildcards des LIKE-Operators maskiert durch "[" und "]"
Dann werden Prozentzeichen und Unterstriche als Literale behandelt.

Also teste einfach ein
select * from sys.objects
where name like '%[_]%';  

Grüße
Biber