`
lenxen
  • 浏览: 30566 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

SQL搜索下划线,like中不能匹配下划线的问题

阅读更多

 

最近在检测天气预报15天查询网站(http://tqybw.net)时的URL时,发现页面中有很些404页,分析发现,是请求地址的能参数中多了下划线“_”,而rewrite规则中并没有配这样的规则,数据库表中出现“_”,并不多,想找出来把下划线去掉,按照正常的查找,结果返回记录不正常,找了下资料,原来下划线在like中有着特殊的含义,它表示匹配任意一个字符。因此在查询包含下划线内容的时候需要“特殊关照”一下。

 

以下是分析及解决办法:

使用like语句的错误查询

mysql> select * from t where x like '%_%';

返回全部的记录,不是想要的结果!

 

为什么错误?

因为在like语句中的下划线的含义是“任意一个字符”,类似“%”代表匹配任意多个字符的。

 

4.正确的查询方法

能想到的有如下两种方法。

1)第一种方法使用escape转义

mysql> select * from t where x like '%\_%' escape '\';

返回包含有"_"的记录,正确

 

escape的内容可以任意,只要保证前后一致即可。

mysql> select * from t where x like '%|_%' escape '|';

返回包含有"_"的记录,正确

 

mysql>  select * from t where x like '%*_%' escape '*';

返回包含有"_"的记录,正确

 

2)使用instr函数辅助判断

使用instr函数判断字段中是否包含“_”,如果包含返回值是非零的,如果不包含则返回值是零。

mysql> select * from t where instr(x,'_')!=0;

 

分享到:
评论

相关推荐

    SQL Server查询中的特殊字符处理

    SQL Server查询中的特殊字符处理 ...但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:下划线“_”,百分号“%”,方括号“[]”以及尖号“^”。 其用途如下: 下划线..........

    delphi资源-Filter中的模糊过滤

    且和SQL语句用法一致,可以任意匹配,如“Fcode like 1%”,但要注意,在字符串前加“%”时,其后面一定也要加“%”,否则会报错,也可以一个“_”,此处有两点不明白:一是为什么会报错,二是下划线是如何匹配的,...

    Mysql| 使用通配符进行模糊查询详解(like,%,_)

    _下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符. like操作符: LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较. 注意: 如果在使用like操作符时,后面的没有使用通用匹配...

    嵌入式系统/ARM技术中的在SQL Server中用好模糊查询指令LIKE

    查询是SQL Server中重要的功能,而在查询中将Like用上,可以搜索到一些意想不到的结果和效果,like的神奇之处在于其提供的模糊查询功能,通过与它相匹配的四大类通配符,like放在条件中起到画龙点睛的作用。...

    2009达内SQL学习笔记

    还能代表搜索模式中给定位置的0个或多个字符。下划线匹配单个任意字符。 如:select table_name from user_tables where table_name like 'S\_%' escape'\'; ' 找出“S_“开头的,由于下划线有任意字符的含义,故需...

    关于SQL易忘的十四个知识点

    主要记录SQL尤其是MySQL中,一些看了就忘,需要经常查的小知识点~ ...下划线的用途与%一样,但是%能匹配0个字符不一样,_总是匹配一个字符,不能多也不能少。 2. 匹配不区分大小写 通过使用BINAR

    mysql模糊匹配和常用通配符使用

    首先,mysql 模糊匹配使用like语句,通配符有:%,_(下划线) %的作用:表示任何字符出现任意次数(即可以匹配任意字符0次或无数次) _(下划线)作用:只能匹配单个字符。 01.例:我要模糊查询名字是张开头的,且名字...

    浅谈MySQL模糊查询中通配符的转义

    sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符。如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就...

    oracle sql语言模糊查询–通配符like的使用教程详解

    oracle在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很像…”的数据记录,以下是可使用的通配符: % 零或者多个字符 _ 单一任何字符(下划线) \ 特殊字符 oracle...

    SQL必知必会(第3版)--详细书签版

    4.2.2 不匹配检查 22 4.2.3 范围值检查 22 4.2.4 空值检查 23 4.3 小结 24 第5章 高级数据过滤 25 5.1 组合WHERE子句 25 5.1.1 AND操作符 25 5.1.2 OR操作符 26 5.1.3 计算次序 26 5.2 IN操作符 28 5.3 ...

    SQL必知必会(第3版-PDF清晰版)part1

    4.2.2 不匹配检查..... 22 4.2.3 范围值检查..... 22 4.2.4 空值检查..... 23 4.3 小结..... 24 第5章 高级数据过滤...... 25 5.1 组合WHERE子句..... 25 5.1.1 AND操作符..... 25 5.1.2 OR操作符..... 26 5.1.3 ...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    IS NULL是一个整体,不能将IS换成”=”. 三、使用聚合函数查询数据 3.1、group by 分组 如下: [sql] view plain copy select * from STUDENT group by STU_SEX; 不加条件,那么就只取每个分组的第一条。 如果想看...

    SQL中使用ESCAPE定义转义符详解

    为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(_)或者方括号([])字符,就需要有一种方法告诉DBMS,将LIKE判式中的这些字符看作是实际值,而不是通配符。关键字 ESCAPE允许确定一个转义字符,告诉...

    在MySQL中使用通配符时应该注意的问题

    现象: 有一个表 action_conf,数据如下: 如果想获取以exp_site_10_开头的en_name的记录,sql语句该如何写?  so easy!...在sql中,下划线_是一个通配符,能匹配任何单一字符。  既然知道原因,

    PostgreSQL LIKE 子句

    PostgreSQL LIKE 子句 在 PostgreSQL 数据库中,...以下是使用 LIKE 子句搭配百分号 % 和下划线 _ 从数据库中获取数据的通用语法: SELECT FROM table_name WHERE column LIKE 'XXXX%'; 或者 SELECT FROM table_name

    mysql正则表达式(regexp和rlike)的搜索功能实例分析

    本文实例讲述了mysql正则表达式(regexp和rlike)的搜索功能。分享给大家供大家参考...使用正则表达式的优点是,不限于在like运算符中基于具有百分号(%)和下划线(_)的固定模式搜索字符串。 使用正则表达式,有更多的元

Global site tag (gtag.js) - Google Analytics