背景:一次搞清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 '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' '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 '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' 'a'
UNION ALL
SELECT '' '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结尾的信息时候就查不到结果

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

这种情况需要注意。

(转)sql通配符的更多相关文章

  1. SQL TOP 子句、SQL LIKE 操作符、SQL 通配符

    TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. SQL Server 的语法: S ...

  2. sql常识-SQL 通配符

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

  3. SQL 通配符

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

  4. SQL通配符

    通配符可用于替代字符串中的任何其他字符. 在 SQL 中,通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代 ...

  5. SQL 通配符的使用?三种

    SQL 通配符 通配符可用于替代字符串中的任何其他字符. SQL 通配符 在 SQL 中,通配符与 SQL LIKE 操作符一起使用. SQL 通配符用于搜索表中的数据. 在 SQL 中,可使用以下通 ...

  6. 【数据库】 SQL 通配符

    [数据库] SQL 通配符 1. % : 替代一个或多个字符 2. _ : 仅替代一个字符 3. [] : 字符列中的任何单一字符 4. [^charlist] 或者 [!charlist]  : 不 ...

  7. sql通配符+sql中查询条件包含下划线等通配符的写法

    一.SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代一个或多 ...

  8. SQL-W3School-高级:SQL 通配符

    ylbtech-SQL-W3School-高级:SQL 通配符 1.返回顶部 1. 在搜索数据库中的数据时,您可以使用 SQL 通配符. SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代 ...

  9. 关于sql通配符检索问题-【.NET】

    确定给定的字符串是否与指定的模式匹配.模式可以包含常规字符和通配符字符.模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配.然而,可使用字符串的任意片段匹配通配符.与使用 = 和 != 字符串比 ...

随机推荐

  1. NLTK学习笔记(四):自然语言处理的一些算法研究

    自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结 ...

  2. 工作流调度引擎---Oozie

    Oozie使用教程 一.   Oozie简介 Apache Oozie是用于Hadoop平台的一种工作流调度引擎. 作用 - 统一调度hadoop系统中常见的mr任务启动hdfs操作.shell调度. ...

  3. 编写自己的Nmap(NSE)脚本

    编写自己的Nmap脚本 一.介绍 在上一篇文章Nmap脚本引擎原理中我们介绍了基本的NSE知识,这篇文章介绍如何基于Nmap框架编写简单的NSE脚本文件,下一篇文章,Nmap脚本文件分析(AMQP协议 ...

  4. [转]Java多线程学习(吐血超详细总结)

    转自:http://www.mamicode.com/info-detail-517008.html 本文主要讲了Java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法. ...

  5. [0] MVC&MVP&MVVM差异点

    MVC: 用户的请求首先会到达Controller,由Controller从Model获取数据,选择合适的View,把处理结果呈现到View上: MVP: 用户的请求首先会到达View,View传递请 ...

  6. oracle创建数据库表空间 用户 授权 导入 导出数据库

    windows下可以使用向导一步一步创建数据库,注意编码. windows连接到某一个数据库实例(不然会默认到一个实例下面):set ORACLE_SID=TEST --登录开始创建表空间及可以操作的 ...

  7. ajax异步加载遮罩层特效

    <!doctype html> <html> <head> <title>遮罩层(正在加载中)</title> <meta chars ...

  8. tomcat启动不了,内存溢出

    今天下午不知道做了什么,然后tomcat启动了10分钟还启动不了.然后看控制台报错信息,说是内存溢出.然后就各种百度,终于解决了.在这里记录提示自己,避免这种问题再次出现还要浪费时间去找方法解决. 最 ...

  9. SQL SERVER 删除前判断指定的表或者存储过程是否存在

    1.创建存储过程: CREATE PROCEDURE proc_pr ---将create修改成alter可以修改存储过程: AS BEGIN IF EXISTS(SELECT * FROM syso ...

  10. accp8.0转换教材第9章JQuery相关知识理解与练习

    自定义动画 一.单词部分: ①animate动画②remove移除③validity有效性 ④required匹配⑤pattern模式 二.预习部分 1.简述JavaScript事件和jquery事件 ...