SELECT firstname, lastname FROM students WHERE lastname LIKE 'D%'
But things start getting interesting when your data has one or all of the above wildcards in your data and you would like to lookup a pattern. Lets create a table to illustrate this:
CREATE TABLE wildcards
(
c1 int identity,
c2 nvarchar(20)
);
--insert some data that has wildcards
INSERT INTO wildcards VALUES ('Joker')
INSERT INTO wildcards VALUES ('_Joker')
INSERT INTO wildcards VALUES ('Joker_')
INSERT INTO wildcards VALUES ('%Joker')
INSERT INTO wildcards VALUES ('%%Joker')
INSERT INTO wildcards VALUES ('[]Joker')
INSERT INTO wildcards VALUES ('[][]Joker')
INSERT INTO wildcards VALUES ('[^]Joker')
INSERT INTO wildcards VALUES ('__Joker')
GO
--check data,
SELECT * FROM wildcards
--9 rows
Now try a regular query with Like predicate and try to find all jokers that have an underscore preceding the value.
SELECT * FROM wildcards WHERE c2 LIKE '_%'
Surprise! SQL server returns all 9 rows. It thinks that we passed two wildcards. We need to tell SQL Server not to treat '_' as wildcard. You can do so using the ESCAPE keyword.
SELECT * FROM wildcards WHERE c2 LIKE '!_%' ESCAPE '!' SELECT * FROM wildcards WHERE c2 LIKE '%!_' ESCAPE '!'
No comments:
Post a Comment