SQL Server like 的简单用法解释 模糊查询
Posted 努力写代码中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server like 的简单用法解释 模糊查询相关的知识,希望对你有一定的参考价值。
一、问题或解决方法应用场景。
使用SQL Server 查询时,经常会使用模糊查询,需要查询包含的指定字符串内容。下面的内容,我简单总结下,like 的常用方式。 (电脑没法发图片,就简单描述+代码了。。。。)
二、示例数据表格式(Student)
| Column Name | Type |
---------------------------------------------
| ID | int |
| Name | varchar |
三、示例数据表(Student)
ID | Name
-----------------------------------
1 | 张三
2 | 张天宝
3 | 李四
4 | 王涛
5 | 刘建宝
6 | 张天利
7 | 诸葛 万三
8 | 李涛
9 | 司马 天万
10 | 万宏
二、具体用法说明
1.%
1> 查询以‘李’开头的学生姓名
SELECT Name
FROM Student
WHERE Name like '李%'
结果:李四, 李涛
2> 查询以‘三’结尾的学生姓名
SELECT Name
FROM Student
WHERE Name like '%三'
结果: 张三,诸葛 万三
3> 查询含‘建’的学生姓名
SELECT Name
FROM Student
WHERE Name like '%建%'
结果: 刘建宝
注释:只要字段里面包含就能查出、
4> 查询姓或者名中首个字符是‘万’的学生姓名(诸葛是姓,万三是名)
SELECT Name
FROM Student
WHERE Name like '万%' or Name like ' 万%' ///(有个空格)
结果:万宏 , 诸葛 万三
5> 查询不含‘建’的学生姓名 (加个 not 就行了)
SELECT Name
FROM Student
WHERE Name not like '%建%'
结果: 除了 ‘刘建宝’ , 别人都查出来了
2._
1> 查询学生姓名中的第二字是天的姓名
SELECT Name
FROM Student
WHERE Name like '_天%'
结果: 张天宝, 张天利
3.[]
1> 查询学生姓是‘王’或'刘'
SELECT Name
FROM Student
WHERE Name like '[刘王]%'
结果: 王涛,刘建宝
4.[-]
标识在一个范围内, 比如查询英文,首个字母在a,b,c,d,e中 , '[a-e]%'
数据表给不太合适, 这里就不写例子了,以后有时间了再补。
5.[^]
简单的理解就是取反, 比如查询英文,首个字母不在a,b,c,d,e中 , '[^a-e]%'
三、注意事项,着重注意点。
注意查收尾的话, %的位置即可
持续更新中、、、、、、本人代码新手,能力有限,如有不足之处,欢迎大家一起讨论交流。
SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑
原文:SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑一同事在写脚本时,遇到一个关于LIKE里面使用不同的变量类型导致查询结果不一致的问题,因为这个问题被不同的人问过好几次,索性总结一下,免得每次都要解释一遍,直接丢一篇博客岂不是更方便!其实看似有点让人不解的现象背后实质跟数据类型的实现有关。
下面我们构造这样一个类似的简单案例。如下所,
CREATE TABLE TEST
(ID INT IDENTITY(1,1),
NAME VARCHAR(32)
)
INSERT INTO dbo.test
SELECT ‘abc32‘
INSERT INTO dbo.test
SELECT ‘abd32‘
INSERT INTO dbo.test
SELECT ‘abe32‘
DECLARE @name VARCHAR(32);
SET @name=‘ab%‘;
SELECT * FROM TEST WHERE NAME LIKE @name;
DECLARE @name1 CHAR(32);
SET @name1=‘ab%‘;
SELECT * FROM dbo.TEST WHERE NAME LIKE @name1;
如上截图所示,当变量使用VARCHAR类型与CHAR类型时,两种的输出结果完全不一样。如果对SQL SERVER数据类型了解不透彻的话,估计真的对这个问题感到相当困惑。但是对SQL Server数据类型了解比较深入的人来说,这真的是一个简单到不能再简单的问题。
如下所示,我们在SQL语句中加入两句SQL,用DATALENGTH返回任何表达式的字节数,你会发现VARCHAR类型的变量返回的字节数为3,但是CHAR类型的变量的字节数为32,其实原因就在于CHAR类型是定长的,也就是当你输入的字符小于你指定的数目时,例如char(32),你输入的字符小于32时,它会在后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符. 所以下面两种LIKE的逻辑意义不一样。LIKE ‘ab%‘ 与 LIKE ‘abc% ‘的逻辑完全不同。
其实你想从侧面印证一下也很简单,如下脚本对比所示,仔细理解一下,也许你就想明白了!
DECLARE @name CHAR(32);
SET @name=‘ab%‘;
SELECT * FROM TEST WHERE NAME LIKE @name;
DECLARE @name1 CHAR(3);
SET @name1=‘ab%‘;
SELECT * FROM dbo.TEST WHERE NAME LIKE @name1;
!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->!--CRLF-->
以上是关于SQL Server like 的简单用法解释 模糊查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:SQL Like 通配符特殊用法:Escape
SQL Server:SQL Like 通配符特殊用法:Escape
SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑