今天對oracle的資料,直接修改的時候,發現了escape 這個詞覺得平時沒有使用,需要總結一下oracle的模糊查詢。
題目:1、查詢出zd_bh含有符號『的sql
答:分析:上述需要將【』】單引號變成【「】雙引號即可,使用者輸入如果沒有任何限制的話,則必須對特殊字元進行變換,如上述迴避方法,同時模糊查詢的語句雖然不會發生sql錯誤,但是不進行迴避的話,則無法得到要檢索的值。方法1:select * from t_cb_sczdk where zd_bh = '%nsc''002';
方法2:select * from t_cb_sczdk where zd_bh like '%''%';
迴避方法:需要使用轉義符!!
將[%]轉為[ /% ]、[ _ ] 轉為 [ /_ ],然後再加上[ 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函式也有三種情況:oracle的正規表示式a. instr(字段,'關鍵字') > 0 相當於 欄位like '%關鍵字%': 表示在字串中包含『關鍵字』
b. instr(字段,'關鍵字') = 1 相當於 欄位like '關鍵字%' 表示以『關鍵字』開頭的字串
c. instr(字段,'關鍵字') = 0 相當於 欄位not like '%關鍵字%' 表示在字串中不包含『關鍵字』
引用文章: 寫的很好
引用文章: 寫的很好
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 ...