首页 > 数据库 >Oracle 解决like中无法匹配下划线的问题

Oracle 解决like中无法匹配下划线的问题

时间:2024-04-02 12:13:50浏览次数:27  
标签:下划线 ---------- sec Oracle ora10g select like

如果想检索出字段中包含下划线“_”的内容,该如何书写SQL语句呢?
之所以问这个问题,是因为在Oracle中下划线在like中有着特殊的含义,它表示匹配任意一个字符。因此在查询包含下划线内容的时候需要“特殊关照”一下。
既然被问到了这个问题,简单记录一下两种规避的方法,供参考。

1.创建实验表,并初始化三条数据
sec@ora10g> create table t (x varchar2(10));

Table created.

sec@ora10g> insert into t values ('sec');

1 row created.

sec@ora10g> insert into t values ('secooler');

1 row created.

sec@ora10g> insert into t values ('sec_ooler');

1 row created.

sec@ora10g> commit;

Commit complete.

2.确认表T中的数据,其中包含两条不带下划线的内容,一条带下划线的内容。
sec@ora10g> select * from t;

X
----------
sec
secooler
sec_ooler

3.使用like语句的错误查询
sec@ora10g> select * from t where x like '%_%';

X
----------
sec
secooler
sec_ooler

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

4.正确的查询方法
能想到的有如下两种方法。
1)第一种方法使用escape转义
sec@ora10g> select * from t where x like '%\_%' escape '\';

X
----------
sec_ooler

escape的内容可以任意,只要保证前后一致即可。
sec@ora10g> select * from t where x like '%|_%' escape '|';

X
----------
sec_ooler

sec@ora10g>  select * from t where x like '%*_%' escape '*';

X
----------
sec_ooler

2)使用instr函数辅助判断
使用instr函数判断字段中是否包含“_”,如果包含返回值是非零的,如果不包含则返回值是零。
sec@ora10g> select * from t where instr(x,'_')!=0;

X
----------
sec_ooler

3)
sec@ora10g> select ascii('_') from dual;

ASCII('_')
----------
        95

5.小结
任何语言都存在需要“特殊关照”的情况,这需要具体问题具体分析,发现一个问题解决一个问题,不积跬步无以至千里。

标签:下划线,----------,sec,Oracle,ora10g,select,like
From: https://www.cnblogs.com/ivenlin/p/18110291

相关文章

  • 【了解下Oracle】
    ......
  • openGauss中的sequence跟Oracle的sequence有什么区别?
    openGauss中的sequence跟Oracle的sequence有什么区别?openGauss中也提供了sequence序列功能,使用Oracle的用户应该都非常喜欢使用这个功能。所以如果从Oracle迁移到openGauss,那么这项功能可以完全替代了。接下来我们简单测试一下:enmotech=>droptabletest;DROP......
  • Oracle 常用SQL笔记
    1.查询所有的分区表SELECT*FROMDBA_TAB_PARTITIONS; 2.创建分区altertable{TABLE_NAME}addpartitionSYS_P202403valueslessthan(TO_DATE('2024-03-0100:00:00','SYYYY-MM-DDHH24:MI:SS','NLS_CALENDAR=GREGORIAN')),partition......
  • Oracle 低代码平台 Apex 最新版本 23.2 安装过程
    趁春节快结束前,安装了一把APEX,到目前为此,APEX最新版本为23.2,23.2和21版本有一些变化,只是用于验证,我是使用的单独模式,没有安装TOMAT,下面列一下安装过程:1.环境  ORACLELINUX9.3  GI19.22  ORACLE19.22  CDB  APEX23.22.使用PDB用于APEX  ......
  • Pointer-like classes像指针又像函数
    Pointer-likeclasses像指针又像函数智能指针概念:一个类做出来像类又像指针示例代码:#pragmaonce#ifndef__SHAREPOINTER__#define__SHAREPOINTER__​template<classT>classshared_ptr{public:shared_ptr(T*p):px(p){}T&operator*()const{return*px;}......
  • keil下划线改为光标细致方法(也适用没有硬件键盘情况)
    keil下划线改回光标(没有硬件键盘方法)作者:closer按“insert”切换光标。笔记本的insert可能被占用,调用电脑的软键盘。方法如下:shift+Ctrl+k打开搜狗的软键盘,点击左下脚的ins,即可切换回光标。换回光标。第一步:win+R打开运行对话框。第二步:输入osk,确定,即可以打开......
  • oracle常用命令
    1.修改监听器配置在Oracle数据库中,监听器是一个非常重要的组件,其负责监听外部的请求并将其分发到相应的实例中。当无法远程登录时,我们需要检查监听器的配置。2.在终端中输入以下命令,打开监听器配置文件:$cd$ORACLE_HOME/network/admin$vilistener.ora在文件中修改以下参......
  • MySQL查询语句like_between_and_in
    数据表创建DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`creatDate`datetimeDEFAULTNULLCOMMENT'创建时间',`userName`varchar(20)DEFAULTNULLCOMMENT'用户名',`pwd`varchar(36)DEFAULTNULL......
  • MySQL查询语句like_between_and_in
    1、创建数据表——DDL语句CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULLCOMMENT'创建时间',`userName`varchar(20)DEFAULTNULLCOMMENT'用户名',`pwd`varchar(36)DEFAUL......
  • Oracle中表空间查询
    1、查看表占的空间SELECTt.segment_name,round(SUM(t.bytes/1024/1024/1024),2)FROMuser_segmentstGROUPBYt.segment_nameORDERBYSUM(t.bytes/1024/1024/1024)DESC2、查看表空间使用率(包含临时表空间)SELECT*FROM(SELECTA.TABLESPACE_NAME,ROUND(A.BY......