sql语句like的⽤法有些正则表达式可以通过like实现
在SQL结构化查询语⾔中,LIKE语句有着⾄关重要的作⽤。
LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(⼦串),它主要是针对字符型字段的,它的作⽤是在⼀个字符型字段列中检索包含对应⼦串的。
可以说,like语句是和通配符分不开的。下⾯我们就详细介绍⼀下通配符。
匹配类型
模式
举例 及 代表值
说明
多个字符
%
%c%代表agdcagd等
这种⽅法在很多程序中要⽤到,主要是查询包含⼦串的。
特殊字符
[*]
a[*]a代表a*a
代替*
单字符
b?b代表brb,bFb等
同于DOS命令中的?通配符,代表单个字符
单数字
#
k#k代表k1k,k8k,k0k
⼤致同上,不同的是代只能代表单个数字。
字符范围
- [a-z]代表a到z的26个字母中任意⼀个指定⼀个范围中任意⼀个
续上
排除 [!字符] [!a-z]代表9,0,%,*等它只代表单个字符
数字排除 [!数字] [!0-9]代表A,b,C,d等同上
组合类型字符[范围类型]字符 cc[!a-d]#代表ccF#等可以和其它⼏种⽅式组合使⽤
假设有⼀个数据库中有个表table1,在table1中有两个字段,分别是name和sex⼆者全是字符型数据。
假设表table1中有以下记录:
name sex
张⼩明 男
李明天 男
李a天 ⼥
王5五 男
王清五 男
下⾯我们来举例说明⼀下:
例1,查询name字段中包含有“明”字的。
select * from table1 where name like '%明%'
例3,查询name字段中含有数字的。
select * from table1 where name like '%[0-9]%'
例4,查询name字段中含有⼩写字母的。
select * from table1 where name like '%[a-z]%'
例5,查询name字段中不含有数字的。
select * from table1 where name like '%[!0-9]%'
以上例⼦能列出什么值来显⽽易见。
========语法==========
LIKE
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然⽽,可使⽤字符串的任意⽚段匹配通配符。与使⽤ = 和 != 字符串⽐较运算符相⽐,使⽤通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。
语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
参数
match_expression 任何字符串数据类型的有效 SQL Server 表达式。
patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符
1 % 包含零个或更多字符的任意字符串
⽰例:WHERE title LIKE '%computer% ' 将查处于书名任意位置的包含单词 computer 的所有书名。
regexp like2 _(下划线)任何单个字符
⽰例:WHERE au_fname LIKE '_ean ' 将查以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
3 [] 指定范围中的任何单个字符
⽰例:WHERE au_lname LIKE '[C-P]arsen ' 将查以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓⽒,例如,Carsen、Larsen、Karsen 等
4 [^] 不属于指定范围中的任何单个字符,与 [] 相反
⽰例:WHERE au_lname LIKE 'de[^l]% ' 将查以 de 开始且其后的字母不为 l 的所有作者的姓⽒。
⼀使⽤ like 的模式匹配:
在搜索Datetime类型时,建议使⽤like .
LIKE ⽀持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括 match_expression、pattern 和 escape_character(如果有)都是ASCII 字符数据类型时,将执⾏ ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为 Unicode 并执⾏Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar 数据类型)使⽤ LIKE 时,尾随空格是有意义的。但是对于⾮ Unicode 数据,尾随空格没有意义。Unicode LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容
⼆使⽤ % 通配符
例如,此查询将显⽰数据库中所有的系统表,因为它们都以字母 sys 开始:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys% '
若要查阅⾮系统表的所有对象,请使⽤ NOT LIKE 'sys% '。如果共有 32 个对象且 LIKE 到 13 个与模式匹配的名称,则 NOT LIKE 将到19 个与 LIKE 模式不匹配的对象
三使⽤escape字句的模式匹配
可搜索包含⼀个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符⽽不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,⼀个样本数据库包含名为 comment 的列,该列含⽂本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何⾏,请指定由 WHERE comment LIKE '%30!%% ' ESCAPE '! ' 组成的 WHERE ⼦句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的⾏。
下例使⽤ ESCAPE ⼦句和转义符查 mytbl2 表的 c1 列中的精确字符串 10-15%
USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2 ')
DROP TABLE mytbl2
GO
USE pubs
GO
CREATE TABLE mytbl2
(
c1 sysname
)
GO
INSERT mytbl2 VALUES ( 'Discount is 10-15% off ')
INSERT mytbl2 VALUES ( 'Discount is .10-.15 off ')
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off% ' ESCAPE '! '
GO
四使⽤ [] 通配符
下例查姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的⾏。
USE pubs
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n '
ORDER BY au_lname ASC, au_fname ASC
本⽂转⾃:
附:
sqlserver 中 like 匹配并不完全和正则表达式⼀样,不能直接使⽤正则表达式中 +, ?, *, {m,n} 等匹配模式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论