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 中查找 包含
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()用来在一段字符串中搜索字符串并返回一个整数,整数为子串在父串中匹配的位置,如果不存在,则放回零
比如:
select charindex('789','123456789',2): 在‘123456789’中从第二位开始搜索‘789’,返回的值为:7
回到上面的问题
Select *
From table_name
Where charindex(book,'aVeryLongString')>0
返回值大于零表示book字段的值为‘aVeryLongString'的子串,start位为空的话,默认表示从起始位开始搜索。