在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
LIKE关键字共有四种通配符。“%”代表“包含0个或更多字符的任意字符串”;“_”代表“任何单个字符”;“[]”代表“指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符”;“[^]”代表“不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符”。
SELECT * FROM sysobjects WHERE [name] LIKE '%sys%'---包含字符串"sys"的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE 's_s_t_'---包含单词"s""s""t"并穿插一个任意单词的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '_ysrowsets'---包含一个任意单词开头且以字符串"ysrowsets"结尾的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE 'j%s'---包含单词"j"开头"s"结尾的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[qe]%'---包含单词"q"或"e"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[^djsmupftqe]%'---不包含单词"d,j,s,m,u,p,f,t,q,e"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '[^a-s]%'--不包含单词"a"到"s"开头的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE [name] LIKE '%[_]Ins'---包含单词"_Ins"并以此结尾的所有记录
/*或使用 CHARINDEX 或PATINDEX
返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
*/
UNION ALL
SELECT * FROM sysobjects WHERE CHARINDEX('%s1%',[name])> 0 ---包含单词"s1"的所有记录
UNION ALL
SELECT * FROM sysobjects WHERE PATINDEX('%s1%',[name])> 0 ---包含单词"s1"的所有记录
使用通配符可以编辑复杂的搜索字符串。假如要确定一个字符串是否包含字母A和Z,还有任何数字,这个PARINDEX函数命令可能像这样:
PATINDEX('%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%','XYZABC123')
最后值得说明的是,在使用函数时 charindex > like > padindex 效率依次递减。