2017-11-14 2 views
2

Ich muss in einem Beschreibungsfeld string/rows nach der Erwähnung der folgenden Sonderzeichen suchen. Einige davon sind einfach, aber es gibt einige, die ich nicht herausfinden kann, wie suchen:Suchen Sie nach bestimmten Sonderzeichen SQL Server 2008 R2

Special characters: < > { } [ ] " ' * = @ ~ | <Tab> (tab key) <Enter> (extra line (carriage return)) 

, was ich habe, so weit:

select * from 
table 
where [Account description] like '[<>{}[]*[email protected]~|]' 

Nicht sicher, wie folgende Sonderzeichen zu identifizieren:

" (double quote) 
' (single quote) 
<Tab> (tab key) 
<Enter> (extra line (carriage return)) 

Antwort

2

Klingt, wie Sie alle nicht-alphanumerischen Zeichen wollen? Wenn ja, können Sie

declare @table table (id int identity (1,1), column1 nvarchar(64)) 
insert into @table 
values 
('<'), 
('>'), 
('{'), 
('}'), 
('['), 
(']'), 
('"'), 
(''''), 
('*'), 
('='), 
('@'), 
('~'), 
('|'), 
('a' + char(10)), 
('b' + char(13)), 
('c' + char(9)), 
('a'), 
('A'), 
('1') 

select * 
from @table 
where [Account description] like '%[^0-9a-zA-Z]%' 

Ansonsten verwenden, werden Sie sie explizit aufzulisten benötigen und eine Escape-Wert für die Sonderfälle verwenden ...

select * 
from @table 
where column1 like '%[<>{}![!]"''''*[email protected]~|]%' ESCAPE '!' 
or column1 like '%' + char(10) + '%' 
or column1 like '%' + char(9) + '%' 
or column1 like '%' + char(13) + '%' 
+0

Warum ziehen beide Abfragen die Zeilen a, b und c? Auch, was ist los mit "ODER" -Anweisungen mit Zeichenlänge in Ihrer zweiten Abfrage? – NonProgrammer

+1

Da der erste nach allen Zeilen sucht, in denen ein Nicht-Alpha-Zeichen vorhanden ist. In den Zeilen a, b und c gibt es non-aplha (Registerkarte, CR, etc ...). Die zweite Abfrage sucht explizit nach jedem Fall. Wenn es eine andere Spalte gäbe, sagen wir einmal das Sonderzeichen ':', dann würde der erste es zurückgeben, aber der zweite würde es nicht tun. Das ODER soll die Bedingungen der Zeilenrücklauf-, Tabulatortaste usw. behandeln. Char (10) ist Zeilenvorschub, char (9) ist ein Tabulator, und char (13) ist ein Zeilenrücklauf in ASCII. siehe: http://www.asciitable.com/ – scsimon

+1

Schätzen Sie Ihre eingehende Antwort. – NonProgrammer

0

Mai werden Sie so etwas wie dies versuchen könnte:

select * from table 
where [Account description] like '[<>{}[]*[email protected]~|]' 
and [Account description] like '%''%' 
and [Account description] like '%'+CAST(X'09' AS TEXT)+'%' 
and ([Account description] like '%'+char(13)+'%' 
or [Account description] like '%'+char(10)+'%) 

aber ich denke, wird langsam sein.

+0

, die nicht für die Konsolen funktionieren wird und Ich würde '%%' einschließen sonst finden Sie nur Spalten, in denen * nur * dieser Wert existiert – scsimon

+0

@scsimon gut ich versuchte nur, das für "zu lösen (doppelte Anführungsstrich) " (einfacher Anführungsstrich) (Vorsprungschlüssel) (zusätzliche Zeile (Wagenrücklauf)) – Prashant

+0

Keine Sorge, ich machte gerade ein O Erhaltung, da Sie gemischte Logik haben. – scsimon

Verwandte Themen