(转)sql通配符

背景:一次搞清sql查询中的通配符问题。

1 sql通配符

通配符主要以下几种:%_[][^] 。

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。SQL 通配符必须与 LIKE 运算符一起使用,必须放在引号内。

在 SQL 中,可使用以下通配符:

%:替代一个或多个字符。

_:仅替代一个字符。

[charlist]:字符列中的任何单一字符。

[^charlist]或者[!charlist]:不在字符列中的任何单一字符。 

1.1 举例分析

例子:

SELECT * FROM Persons WHERE City LIKE 'Ne%';
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er';
选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

SELECT * FROM Persons WHERE City LIKE '[ALN]%'
选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

1. %:模糊匹配一个或多个字符。如,以ab开头

SELECT * FROM (  
    SELECT 'abc_2sd_38u' 'a'  
    UNION ALL  
    SELECT 'bcf' 'a'  
) c  
WHERE c.a LIKE 'ab%' 

a
-----------
abc_2sd_38u

 

2. _:占位符,匹配任意一个字符。如,以abc_开头

SELECT * FROM (  
    SELECT 'abc_2sd_38u' 'a'  
    UNION ALL  
    SELECT 'abcd_5d_3u' 'a'  
    UNION ALL  
    SELECT 'abc' 'a'  
) c  
WHERE c.a LIKE 'abc[_]%' 
a
-----------
abc_2sd_38u
 

3. []:目标匹配字符:匹配单个字符,若写了多个,匹配任一。如,所有以1或者2开头的

复制代码
SELECT * FROM (  
    SELECT '1_21' 'a'  
    UNION ALL  
    SELECT '121' 'a'  
    UNION ALL  
    SELECT '131' 'a'  
    UNION ALL  
    SELECT '142' 'a'  
    UNION ALL  
    SELECT '223' 'a'  
    UNION ALL  
    SELECT '324' 'a'  
) x  
WHERE x.a LIKE '[12]%'  
复制代码
a
-----------
1_21
121
131
142
223
 

4. [^]:目标匹配字符,[]相反。如,所有非1、2开头的

复制代码
SELECT * FROM (  
    SELECT '1_21' 'a'  
    UNION ALL  
    SELECT '121' 'a'  
    UNION ALL  
    SELECT '131' 'a'  
    UNION ALL  
    SELECT '142' 'a'  
    UNION ALL  
    SELECT '223' 'a'  
    UNION ALL  
    SELECT '324' 'a'  
) x  
WHERE x.a LIKE '[^12]%'  
复制代码

a
-----------
324

2 问题

2.1 模糊查询与通配符冲突

表结构描述:当前有一张表,此处假定node_info,存在一个字段node_path是由 ‘字母’、‘数字’ 及 ‘下划线_’组成,如:abc_1_de_f
需求:查询所有node_path以‘abc_’开头的记录
 
这个问题,自然而然的就想到,很简单,直接like % 模糊匹配就OK: 
SELECT * FROM mode_info WHERE node_path LIKE 'abc_%' 

 上述处理时错误的。要避免该错误,很简单:只要避免‘_’在此处作为通配符存在即可。如何避免呢,那就需要用到另外一个通配符'[]'。修改sql:

SELECT * FROM mode_info WHERE node_path LIKE 'abc[_]%'  

 

2.2 数据库中模糊查询不到结果

如下图,左右加 %% 是能够查询到结果的。

 但是要查询以Y04结尾的信息时候就查不到结果

 

后来仔细比对发现是数据库中字段后面存在两个空格,导致模糊结果无法匹配。

这种情况需要注意。

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,让更多的人能够享受到获取知识的快乐!因为本人初入职场,鉴于自身阅历有限,所以本博客内容大部分来源于网络中已有知识的汇总,欢迎各位转载,评论,大家一起学习进步!如有侵权,请及时和我联系,切实维护您的权益!
posted @   CS408  阅读(1713)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示