Oracle模糊查詢

2021-09-28 21:29:15 字數 2750 閱讀 1992

今天對oracle的資料,直接修改的時候,發現了escape 這個詞覺得平時沒有使用,需要總結一下oracle的模糊查詢

題目:1、查詢出zd_bh含有符號的sql

答:

方法1:select * from t_cb_sczdk where zd_bh = '%nsc''002';

方法2:select * from t_cb_sczdk where zd_bh like '%''%';

分析:上述需要將【』】單引號變成【「】雙引號即可,使用者輸入如果沒有任何限制的話,則必須對特殊字元進行變換,如上述迴避方法,同時模糊查詢的語句雖然不會發生sql錯誤,但是不進行迴避的話,則無法得到要檢索的值。

迴避方法:需要使用轉義符!!

將[%]轉為[ /% ]、[ _ ] 轉為 [ /_ ],然後再加上[ escape '/' ]就可以了

-- 查詢zd_bh是以"sdd"開頭的sql

select * from t_cb_sczdk where zd_bh like 'sdd_%' escape ' ';

-- 查詢zd_bh是以"sdd_"開頭的sql

select * from t_cb_sczdk where zd_bh like 'sdd/_%' escape '/';

-- 查詢zd_bh含有"%"的sql

select * from t_cb_sczdk where zd_bh like '%/%%' escape '/';

-- 查詢zd_bh含有"&"的sql

select * from t_cb_sczdk where zd_bh like '%/&%' escape'/';--error

select ascii('&') from dual;

select * from t_cb_sczdk where zd_bh like '%'||chr(38)||'%';--ok

-- 插入一條" test& "的sql

insert into tablename values('test'||chr(38)||'');

-- 插入一條" tom&jerry "的sql

insert into tablename values('tom' || '&' || 'jerry' );

-- 插入一條" test' "的sql

insert into tablename values('test' || '''' );

2、模糊查詢

-- 1,% :表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號(%%)表示。

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 '_三_'; -- 必須中間是三的查詢結果

select * from user where u_name like '三__'; -- 倒數第三是三的查詢結果(2個「_」)

select * from user where u_name like '_三'; -- 必須結尾是三的查詢結果

在大表中,進行模糊查詢,一般情況下是用like'%%',但是這個東西走的是全表掃瞄,如果在資料量非常大的情況下,效率特別慢,因此,嘗試用oracle函式instr()來解決。

select * from t_cb_sczdk where zd_bh like '%j%';

-- 等價於

select * from t_cb_sczdk where instr(zd_bh,'j')>0;

-- 等價於

select * from t_cb_sczdk where regexp_like(zd_bh,'j');

instr函式也有三種情況:

a. instr(字段,'關鍵字') > 0    相當於 欄位like '%關鍵字%':        表示在字串中包含『關鍵字』

b. instr(字段,'關鍵字') = 1    相當於 欄位like '關鍵字%'            表示以『關鍵字』開頭的字串

c. instr(字段,'關鍵字') = 0    相當於 欄位not like '%關鍵字%'  表示在字串中不包含『關鍵字』

引用文章: 寫的很好

oracle的正規表示式

引用文章: 寫的很好

Oracle 模糊查詢

在where子句中,可以對datetime char varchar欄位型別的列用like子句配合萬用字元選取那些 很像.的資料記錄,以下是可使用的萬用字元 零或者多個字元 單一任何字元 下劃線 特殊字元 在某一範圍內的字元,如 0 9 或者 aeth 不在某範圍內的字元,如 0 9 或者 aeth...

oracle 模糊查詢

oracle10g以上支援正規表示式的函式主要有下面四個 1,regexp like 與like的功能相似 2,regexp instr 與instr的功能相似 3,regexp substr 與substr的功能相似 4,regexp replace 與replace的功能相似 posix 正規表...

oracle模糊查詢

執行資料庫查詢時,有完整查詢和模糊查詢之分。一般模糊語句格式如下 select 字段 from 表 where 某欄位 like 條件 其中,關於條件,sql提供了四種匹配模式 1 表示零個或多個字元。可以匹配任意型別和任意長度的字元,有些情況下若是中文,請使用兩個百分號 表示。比如 select ...