1. 程式人生 > >Oracle中的like查詢注意下劃線“_”的使用

Oracle中的like查詢注意下劃線“_”的使用

【前言】             

         今天突然測試出之前寫的SQL語句有一個漏洞,比如模糊匹配SQL是醬嬸兒的——name like 'ab_%',竟然能查詢出來值為abc_2016abcd_2016的值來,好尷尬啊.........仔細的搜尋了一番,原來問題全出現在下劃線“_”身上,看來.............................................................自己還是太小白.....哭

言歸正傳:

【問題原因】

下劃線“_”在oracle中不是單純的表示下劃線的意思,而是表示匹配單一任何字元!

【解決辦法】

1.使用 escape() 函式

escape關鍵字經常用於使某些特殊字元,如萬用字元:'%','_'轉義為它們原來的字元的意義,被定義的轉義字元通常使用'\',但是也可以使用其他的符號。

例如:我上面的問題可以寫成where name like 'ab\_%' escape '\'這個“\”可以改為其他字元

【其他參考方法】

2.使用 instr() 函式輔助判斷

instr函式在Oracle/PLSQL中表示返回要擷取的字串在源字串中的位置;如果找到了,則返回下標(從1開始);如果沒有找到,則返回0。

3.使用 ASCII() 函式

ASCII函式表示返回最左邊的字元的字串str的數值。如果str是空字串,返回0。如果str為NULL,

返回NULL。 ASCII()是從0到255的數值的字元。