Reputation: 61
I'd like to find special characters in SQL like this tutorial, but I'd like to expand the character set.
Say I have a table:
CREATE TABLE SpecialCharacter (
SampleString varchar(255)
);
INSERT INTO SpecialCharacter (SampleString) VALUES (' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~');
INSERT INTO SpecialCharacter (SampleString) VALUES (' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{}~');
INSERT INTO SpecialCharacter (SampleString) VALUES ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
INSERT INTO SpecialCharacter (SampleString) VALUES ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\u001a');
INSERT INTO SpecialCharacter (SampleString) VALUES ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzģ');
INSERT INTO SpecialCharacter (SampleString) VALUES ('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
INSERT INTO SpecialCharacter (SampleString) VALUES ('-');
INSERT INTO SpecialCharacter (SampleString) VALUES ('c-r');
INSERT INTO SpecialCharacter (SampleString) VALUES ('_noice');
INSERT INTO SpecialCharacter (SampleString) VALUES ('_noice^^');
And I have the below query:
select * from SpecialCharacter WHERE SampleString LIKE '%[^ !"#$\%&''()*+,-./0-9A-Za-z:;<=>@\[\\\]\_]%' ESCAPE '\' AND SampleString LIKE '%[^{}~]%' ESCAPE '\'
I've managed to figure out how to find all the characters except for ^
. The closest I got for ^
was something like the below:
select * from SpecialCharacter WHERE SampleString LIKE '%[\^]%' ESCAPE '\'
This works when I want to find data in column
containing ^
. However, I'd like to find data in column
that contains something that's not in the list of acceptable characters.
~
, {
and }
on its own works, but does not work when I put it into the LIKE
statement with everything else, which is why I separated them. But if I can put them in the same statement that'd be great, too.
What am I missing? I can't use CONTAINS
or FREETEXT
, or variables etc, the query should be as simple as possible.
Upvotes: 2
Views: 1875
Reputation: 7240
Don't escape it.
As you already found out, if you want to find the caret, i.e. you are interested in it as a character, you have to escape it.
WHERE SampleString LIKE '%[\^]%' ESCAPE '\'
When you are trying to find strings that do not contain something, i.e. use the caret for its "function", you have to not escape it:
where SampleString LIKE '%[^~{}]%' ESCAPE '\'
You could actually use both escaping and not escaping in the following example, where you would get strings that contains something else other than the caret:
where SampleString LIKE '%[^\^]%' ESCAPE '\'
Upvotes: 3
Reputation: 61
Turns out I was missing the question mark; the query itself with the special characters is alright.
select * from SpecialCharacter WHERE SampleString LIKE '%[^ !"#$\%&''()*+,-./0-9A-Za-z:;<=>@?\[\\\]\_\^{}~]%' ESCAPE '\'
Upvotes: 0