談談方括號萬用字元
《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 [] 中括號的用法字元
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- 正規表示式中括號[]字元類字元
- 正規表示式 中括號[] 字元類字元
- 在 Bash 中使用[方括號] (一)
- 人人都是藝術家!談談那些奇怪的字元(上)字元
- html標籤的尖括號轉碼為字元實體HTML字元
- (譯) javascript中的物件,方括號和演算法JavaScript物件演算法
- JS物件的方括號表示法和點表示法JS物件
- 萬用字元與特殊符號字元符號
- 談談基於OAuth 2.0的第三方認證OAuth
- 括號畫家
- 有效的括號
- 【棧】括號匹配
- 淺談Rowid中的行號
- 談談撥號動態VPS和vps伺服器區別伺服器
- CSS * 星號 萬用字元選擇器CSS字元
- 談談近況,談談自由職業,談談“金飯碗”
- c++物件建立帶括號與無括號的區別C++物件
- 記錄一次在keil中,查詢ALIGN()括號裡任意字元,ALIGN(.*)字元
- {} 花括號的用法
- 最長有效括號
- [leetcode]有效的括號LeetCode
- 【題解】括號序列
- Shell 括號總結
- 談談位運算和在Android中的運用Android
- 談談關於 iOS 的架構以及應用iOS架構
- 談談如何提升應用釋出的質量?
- JavaScript 解構賦值小括號的應用JavaScript賦值
- 應用安全淺談
- 談談PromisePromise
- 談談RaftRaft
- 由Spring應用的瑕疵談談DDD的概念與應用(二)Spring
- 頂級實用乾貨——談談Java中的volatileJava
- LeetCode有效的括號(Python)LeetCodePython
- 雙括號初始化
- 每日一題: 有效括號每日一題
- leetcode:遞迴:括號生成LeetCode遞迴
- 括號生成-LeetCode22LeetCode