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;

 

 

技术分享图片

以上是关于SQL Server like 的简单用法解释 模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2000 Like 语句用法

SQL Server:SQL Like 通配符特殊用法:Escape

SQL Server:SQL Like 通配符特殊用法:Escape

SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑

SQL SERVER中LIKE使用变量类型不同输出结果不一致解惑

SQL SERVER中LIKE在Char和nChar输出结果不一致解惑