SQL 通配與轉義

2021-08-30 05:45:21 字數 1399 閱讀 4809

今天專案碰到乙個問題,關於sql模糊查詢的通配和轉義,在網上查一些資料,整理一下

萬用字元 說明

_    與任意單字元匹配 

%    與包含乙個或多個字元的字串匹配

[ ]  與特定範圍(例如,[a-f])或特定集(例如,[abcdef])中的任意單字元匹配。 

[^]  與特定範圍(例如,[^a-f])或特定集(例如,[^abcdef])之外的任意單字元匹配。

例子:• where firstname like '_im' 可以找到所有三個字母的、以 im 結尾的名字(例如,jim、tim)。  

• where lastname like '%stein' 可以找到姓以 stein 結尾的所有員工。  

• where lastname like '%stein%' 可以找到姓中任意位置包括 stein 的所有員工。 

• where firstname like '[jt]im' 可以找到三個字母的、以 im 結尾並以 j 或 t 開始的名字(即僅有jim 和tim) 

• where lastname like 'm[^c]%' 可以找到以 m 開始的、後面的(第二個)字母不為 c 的所有姓。

2.   escape   'escape_character'  

允許在字串中搜尋萬用字元而不是將其作為萬用字元使用。escape_character   是放在萬用字元前表示此特殊用途的字 

符。   

select *

from finances

where description like 'g!_' escape '!' go  

意思就是:    

比如,我們要搜尋乙個字串 "g_"  ,如果直接  like "g_",那麼   "_"的作用就是萬用字元,而不是字元,結果,我們

會查到比如  "ga","gb","gc",而不是我們需要的   "g_".    

用  like   'g!_'   escape   '!'     '!'表示特殊用法標誌,注意!可以被任意字元替代,只是不能是系統中允許出現的

字元,否則又要轉義了……  

3.   replace 該派上用場了

其實看著 escape  用法感覺還是很不爽,至少對我現在的需求如此。為什麼不能直接轉移  _  %  等字元麼,非要 

escape  一下 _   %  的前乙個字元!因為我根本不知道使用者輸入的查詢條件中  _  %  前乙個字元是什麼,所以必須要  

replace 一下  t_t

select t.*, t.rowid 

from table1 t

where t.col1 like replace(lower(#col1#), '%', '\%')) || '%' escape '\';

Sql注入與轉義

del.php?id 3 sql delete from news where id get id del.php?id 3 or 1 這時 sql delete from news where id 3 or 1 這樣,所有的新聞將都被刪除.addslashes 可以對某個變數轉義,但是,post...

Sql查詢中的通配字元

如果想查詢 cs 結尾的的賬戶 select from user where loginname like cs 是不行的,被認為是任意的字元,所以需要轉義字元,有兩種寫法 select from user where loginname like cs select from user where...

整理 關於sqlite的特殊字元轉義及萬用字元

1.sqlite中的轉義符 select from table where number like escape sqlite3資料庫在搜尋的時候,一些特殊的字元需要進行轉義,具體的轉義如下 需要注意的是,特殊字元並沒有用反斜槓 表示轉義符。這句話是不正確的,至少在sqliteman中是可以使用 或...