查詢語句中escape的轉義字元

to_be_Dba發表於2013-05-14
 
今天進行一個查詢時發現查詢的結果不太對:
SQL>  select text from user_source where text like '%_32_%';
TEXT
--------------------------------------------------------------------------------
||'  partition p32 values less than ('||'''120410'''||'),'
  -- Created : 2012/7/20 14:55:32
  p_uclog_aft('FM_32_bsp',i_sequnum_uc);
  ELSE o_vc_message:='SUCCESS IN MIGRATE FM_32_bsp'|
4 rows selected

我想要的是含有"_32_"四個字元的,而得到的卻是按"32"查詢出來的結果。
這個時候就需要使用轉移字元,即escape格式:

SQL>  select text from user_source where text like '%__32__%' escape '_';
TEXT
--------------------------------------------------------------------------------
  p_uclog_aft('FM_32_bsp',i_sequnum_uc);
  ELSE o_vc_message:='SUCCESS IN MIGRATE FM_32_bsp'|
2 rows selected

檢視了oracle的reference,我們平時只注意到了%代表任意字元,其實還有一個萬用字元被我們忽略了。
_代表一個字元。
比如我在新增一個儲存過程:
create or replace procedure P_D is
c32 varchar2(10);
 c32 varchar2(10);
 bx32 varchar2(10):=
132;
begin
  if bx32
=32 then
  dbms_output.put_line('~a~');
  end if;
end ;
執行 select * from user_source where text like '_32%'
結果為:
    NAME TYPE LINE TEXT
1 P_D PROCEDURE 2 "c32 varchar2(10);
"
2 P_D PROCEDURE 5 "132;
"
3 P_D PROCEDURE 8 "=32 then
"
也就是說,在匹配一個字元時,空格也是計算在內的。'_'匹配了一個數字、字母或符號(只要是一個字元)
 
escape的作用其實就是轉義萬用字元。在like中,萬用字元只有%和_。其他符號都可以直接呼叫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26451536/viewspace-761050/,如需轉載,請註明出處,否則將追究法律責任。

相關文章