查询sql中常用到 like 进行字段和字符之间的匹配

1. 查询column_id列中以3-7开头(包含3,7)三四位为‘we’,第五位不包含a-c的数据

Select *

From table_name

Where column_id like '[3-7]_we[^a-c]%'

[]:匹配一个范围;   _:匹配一个任意字符;  [^]: 不匹配一个范围;  %: 匹配任意个字符 

 

2.如果需要在 like 中查找 包含  ‘book_name' 的数据,即匹配字符中包含特殊字符的情况

2.1 将特殊字符放在方括号[]中:[_]

Select *

From table_name

Where book like '%book[_]name%'

但是这样造成代码复制,很不直观(个人感觉),而且本身如果位于[]中的字符将无法转义,比如[^]

2.2 另外一种方法就是使用Escape:定义转义符

Select *

From table_name

Where book like '&book\_name%' Escape '\'

将 ‘\'定义为转义符,转义符后的任何字符变为普通字符。

 

3. 以上都是匹配的字符是字段内容中的一个子串,但是也存在字段内容为匹配字符子串的情况。比如有一份书名的列表,现要查找书名在这份书单中书本的具体信息

3.1 使用like的情况

Select *

From table_name

Where 'aVeryLongString' like '%'+book+'%'

'aVeryLongString'为书单,book为字段名, 将字段名用'+'运算符跟‘%’连接,在执行时字段名将被具体内容替换,字段名在这里感觉有点像C中的宏

3.2 使用charindex()函数  语法:charindex( short,long,start)

charindex()用来在一段字符串中搜索字符串并返回一个整数,整数为子串在父串中匹配的位置,如果不存在,则放回零

比如:

select charindex('789','123456789',2): 在‘123456789’中从第二位开始搜索‘789’,返回的值为:7

回到上面的问题

Select *

From table_name

Where charindex(book,'aVeryLongString')>0

返回值大于零表示book字段的值为‘aVeryLongString'的子串,start位为空的话,默认表示从起始位开始搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值