談談方括號萬用字元
《SQL必知必會(第4版)》第6課 用萬用字元進行過濾
6.1.3 方括號([])萬用字元
方括號([])萬用字元用來指定一個字符集,它必須匹配指定位置(萬用字元的位置)的一個字元。
……
此萬用字元可以用字首字元^(脫字號)來否定。例如,下面的查詢匹配不以 J 或 M 起頭的任意聯絡人名:
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[^JM]%' ORDER BY cust_contact;
當然,也可以使用 NOT 操作符得出相同的結果。^ 的唯一優點是在使用多個 WHERE 子句時可以簡化語法:
SELECT cust_contact FROM Customers WHERE NOT cust_contact LIKE '[JM]%' ORDER BY cust_contact;
該小節第一句話“它必須匹配指定位置的一個字元”非常正確。
然後作者說:'[^JM]%'
匹配不以 J
或 M
起頭的任意聯絡人,這就不對了。正確的說法應該是:'[^JM]%'
匹配以 J
和 M
之外的任意字元起頭的聯絡人。因為 '[^JM]%'
要求至少有一個字元,它無法匹配空字串 ''
,而“不以 J
或 M
起頭的任意聯絡人名”理論上可以包括空字串的情形。
作者接著說:當然,也可以使用 NOT
操作符得出相同的結果。這也不對。結果並不嚴格相同:LIKE '[^JM]%'
不能匹配空字串,NOT LIKE '[JM]%'
能。
正規表示式
正規表示式也有同樣的方括號語法(我猜 M$ SQL 的方括號萬用字元語法就是從與正規表示式學來的)。注意:無論是否有脫字號 ^
,[...]
必須匹配且只能匹配一個字元,不能是零個,也不能多於一個。[^...]
中的 ^
是否定脫字號之後的 ...
,而不是否定整個方括號 [...]
。正規表示式的初學者經常在這個地方犯錯誤,應引以為戒。
相關文章
- 萬用字元 and [] 中括號的用法字元
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- 正規表示式中括號[]字元類字元
- 正規表示式 中括號[] 字元類字元
- 請大家談談‘俄羅斯方塊程式
- 字元編碼淺談字元
- 人人都是藝術家!談談那些奇怪的字元字元
- 淺談sql的字元分割SQL字元
- 人人都是藝術家!談談那些奇怪的字元(上)字元
- (譯) javascript中的物件,方括號和演算法JavaScript物件演算法
- JS物件的方括號表示法和點表示法JS物件
- 萬用字元與特殊符號字元符號
- html標籤的尖括號轉碼為字元實體HTML字元
- 從實戰出發,談談 nginx 訊號集Nginx
- 談談 django 應用實踐Django
- 談談基於OAuth 2.0的第三方認證OAuth
- 括號畫家
- 【棧】括號匹配
- CSS * 星號 萬用字元選擇器CSS字元
- c++物件建立帶括號與無括號的區別C++物件
- Shell 括號總結
- Swift之花括號Swift
- 最長有效括號
- 【題解】括號序列
- 正則中括號點符號符號
- 談談用SQLite和FMDB而不用Core DataSQLite
- JavaScript 解構賦值小括號的應用JavaScript賦值
- 括號匹配檢驗 資料結構運用資料結構
- 淺談Rowid中的行號
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- 談談關於 iOS 的架構以及應用iOS架構
- 談談如何提升應用釋出的質量?
- 談談 Redux 與 Mobx 思想的適用場景Redux
- Matlab中的括號()[]{}Matlab
- 每日一題: 有效括號每日一題
- 20. 有效的括號