SQL模糊查询语法LIKE

本文详细介绍了SQL中的模糊查询方法,包括使用%、_、[]和[^]等通配符进行匹配的不同方式,并提供了多条件模糊查询的具体实现步骤及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


执行 数据库查询时,有完整查询和模糊查询之分。
一般模糊语句如下:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了四种匹配模式:

1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请运用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果须要找出u_name中既有“三”又有“猫”的记录,请运用 and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

若运用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_: 表示任意单个字符。匹配单个任意字符,它常用来限定表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;


3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……

5,查询内容包含通配符时

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句不能正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:


function sqlencode(str)
str=replace(str,"[","[[]") '此句一定要在最前

str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function

在查询前将待查字符串先经该函数处理即可。
通常写一个简单的模糊查询的SQL语句格式可以如下例:

sql="select * from 表名 where 字段名 like ’%" & request.form("请求变量") & "%’ "
说明:1、WHERE 关键词的后面跟着用来过滤数据的条件,百分号%是通配符,可以代表多个任何字符,若是下划线_就代表一个任意字符。
实例如下:

sql="select * from 表名 where 姓名 like ’%"&request.form("name")&"%’ and 性别 like ’%"&request.form("sex")&"%’ and 电话 like 
’%"&request.form("call")&"%’ "
上面这条SQL语句使用了三个模糊查询条件:姓名、性别、电话,当然我们还可以用类似

姓名 like ’%"&request.form("name")&"%’ 的方式构造更多的条件。这样我们就实现了多条件的模糊查询,实际试一试,问题出来了!!!如果数据库的查询字段都有值的化没问题,但如果是下边这样:

         姓名                                   性别           电话
         www.DeepTeach.com                    87654321
        当你模糊查询:"电话:5432"时将无法输出该记录,这是因为"性别"无值所以经两个and运算后结果为false/0,没有输出。 显然数据库中这三个字段的必须含有字段值,否则会漏掉正确的输出结果,
        数据库中正确的输入应是这样的:

         姓名                                    性别            电话
         www.DeepTeach.com       null       87654321        <null>值的逻辑值为1,所以经两次and运算后结果为true/1,可以输出上述记录。

那么在实际中如何来实现这样的多条件模糊查询呢?我是这样来实现的:



name=Request.QueryString("name")     ’姓名
sex=Request.QueryString("sex")         ’性别
call=Request.QueryString("call")     ’电话

Sql= "Select * from 表名 where 1=1"    ’1=1 避免所有查询字段为空时出错

if name <>"" then
  Sql= Sql & "and 姓名 like ’%"& name &"%’"
end if
if sex <>"" then
  Sql= Sql & "and 性别 = ’"& sex &"’"    ’这个不是模糊查询了
end if
if call <>"" then
  Sql= Sql & "and 电话 like ’%"& call &"%’"
end if
......
      在此,你要注意到姓名、性别、电话这三个字段在数据库中的类型应为“文本”类型,否则查询时会出现“数据类型不匹配”错误。
      如果三个条件均无输入,点击“查询”时将显示数据库中的所有记录,可能这是你不希望的,可以应该加入一个判断:当三个条件均无输入时,显示“请输入查询条件”,并中断输出到客户浏览器(response.end)例句如下:


if request.form("name")="" and request.form("sex")="" and request.form("call")="" then
    response.write("请输入查询条件(可模糊查询)")
    response.end 
end if
      切记:sql="select * from 表名 where 姓名 ... 电话 like ... "
         必须在一行内输入完,而不能用回车符分段,因为vbs多行被认为是多个语句,这是许多初写者常犯的错误。如果你想分多段写,可以用上面的方法在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内实现。在封闭引号之前或者在打开引号之后你需要增加空格,这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。

 

 

逗号,在sql中like中不需要转义,但是如果
在sql中的某个字段值用“,”分隔数据,
需要获取数据的时候直接把“,”拆分成数据,获得一个数据的list。

例如:需要查询某字段是否包含一个值,
111是否存在于1111,2111,1112,1121,1113这个字段中 。
因为根据“,”逗号分开,要求的答案是:不在字段中。

用传统的like '%111%',显然不合适,这样虽然111不存在但是依然能查到该条记录。
所以应该用以下语句实现:
select * from Table where ','+columA+',' like '%,111,%'。
实际就是把字段填上一个逗号然后在比较。如果你的字段是用别的分隔符,同理可得。

### 回答1: SQL 中的 LIKE 操作符用于在 WHERE 子句中进行模糊查询。它与通配符一起使用,以匹配指定模式的数据。 基本语法如下: ``` SELECT column1, column2, ... FROM table_name WHERE columnN LIKE pattern; ``` 其中,columnN 是要进行模糊查询的列名,pattern 是匹配的模式,可以使用通配符。 常见的通配符有: - %:匹配 0 个或多个字符。 - _:匹配一个任意字符。 例如,要查询名字中包含 "Tom" 的所有用户,可以使用以下语句: ``` SELECT * FROM users WHERE name LIKE '%Tom%'; ``` 这会返回所有名字中包含 "Tom" 的用户信息。 ### 回答2: SQL中的LIKE操作符用于进行模糊查询。它在WHERE子句中与通配符配合使用,以便在数据库中查找匹配特定模式的数据。 LIKE操作符可以与两个通配符一起使用: 1. 百分号:%表示通配任意字符序列(包括零个或多个字符)。 2. 下划线:_表示通配单个字符。 在使用LIKE进行模糊查询时,我们可以根据需要将其放置在查询条件的任意位置。以下是一些常见的LIKE查询示例: 1. 查找以某个特定字母开头的数据: SELECT * FROM 表名 WHERE 列名 LIKE 'a%'; 2. 查找以某个特定字母结尾的数据: SELECT * FROM 表名 WHERE 列名 LIKE '%a'; 3. 查找包含某个特定字母的数据: SELECT * FROM 表名 WHERE 列名 LIKE '%a%'; 4. 查找以特定字母开头和结尾的数据: SELECT * FROM 表名 WHERE 列名 LIKE 'a%a'; 5. 查找包含特定字符和一个任意字符的数据: SELECT * FROM 表名 WHERE 列名 LIKE '_a'; 6. 查找包含特定字符和两个任意字符的数据: SELECT * FROM 表名 WHERE 列名 LIKE '__a'; 注意,LIKE操作符对大小写敏感。如果需要进行不区分大小写的模糊查询,我们可以使用LOWER或UPPER函数将列名和模式都转换为大写或小写。 总之,LIKE操作符是一个强大的工具,可以在数据库中进行模糊查询,帮助我们从大量数据中筛选出所需的信息。 ### 回答3: SQL中的LIKE模糊查询是一种用于在数据库中查找符合特定模式的数据的方法。LIKE操作符通常与通配符一起使用,以匹配不完全的值。 在LIKE模糊查询中,我们可以使用两种通配符:%和_。 %通配符表示零个、一个或多个字符的字符串。例如,如果我们要查找以"abc"开头的字符串,我们可以使用"abc%"来表示。这将匹配"abc"、"abcd"、"abcdef"等等。 _通配符表示一个任意字符的位置。例如,如果我们要查找一个长度为4个字符的字符串,其中第一个字符为"a",最后一个字符为"d",我们可以使用"a__d"来表示。这将匹配"abcd"、"afgd"、"a3sd"等等。 除了通配符外,我们还可以在LIKE模糊查询中使用[]来匹配指定范围的字符。例如,"[a-z]%"表示以任何小写字母开头的字符串,"[0-9]%"表示以任何数字开头的字符串。 可以使用OR和AND操作符将多个LIKE模糊查询结合在一起,以进一步筛选出符合条件的数据。 需要注意的是,在使用LIKE模糊查询时,由于通配符的使用,查询可能会比较耗时,且可能不适用于所有情况。在进行模糊查询时,应尽量减少查询范围和提高查询效率,避免对大型数据集进行全文搜索。 综上所述,SQL中的LIKE模糊查询提供了一种灵活的方式来查找数据库中的数据,通过结合不同的通配符和操作符,我们可以轻松地筛选出符合特定模式的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值