SQL中字符匹配的几种情况

查询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位为空的话,默认表示从起始位开始搜索。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值