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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120923
Url: https://administrator.de/knowledge/mssql-server-suche-nach-bezeichnungen-mit-unterstrich-im-namen-120923.html
Ausgedruckt am: 24.12.2024 um 12:12 Uhr
5 Kommentare
Neuester Kommentar
Moin Netzheimer und -ricardo-,
wenn ich auch mal kurz kommentieren kann:
@-ricardo
Dort führt ein ...WHERE feld LIKE "*_*" in der Tat zum "richtigen" Ergebnis.
Aber was versteht Access auch schon von SQL?
@Netzheimer
Bei MSSQL werden Wildcards des LIKE-Operators maskiert durch "[" und "]"
Dann werden Prozentzeichen und Unterstriche als Literale behandelt.
Also teste einfach ein
Grüße
Biber
wenn ich auch mal kurz kommentieren kann:
@-ricardo
Nimm doch
LIKE "%_%"
Und das klappt sogar bei MSSQL's ungeliebtem Cousin M$-Access.LIKE "%_%"
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