[英]MySql Not Like Regexp?
我正在嘗試找到第一個字符不是數字的行。 我有這個:
SELECT DISTINCT(action) FROM actions
WHERE qkey = 140 AND action NOT REGEXP '^[:digit:]$';
但是,我不確定如何確保它只檢查第一個字符......
首先,您的查詢中存在輕微錯誤。 它應該是:
NOT REGEXP '^[[:digit:]]'
請注意雙方括號。 您還可以將其重寫為以下內容以避免匹配空字符串:
REGEXP '^[^[:digit:]]'
另請注意,使用REGEXP可防止使用索引,並將導致表掃描或索引掃描。 如果您想要更高效的查詢,您應該嘗試在不使用REGEXP的情況下重寫查詢(如果可能):
SELECT DISTINCT(action) FROM actions
WHERE qkey = 140 AND action < '0'
UNION ALL
SELECT DISTINCT(action) FROM actions
WHERE qkey = 140 AND action >= ':'
然后在(qkey,action)上添加一個索引。 閱讀起來不那么令人愉快,但它應該提供更好的性能。 如果每個qkey只有少量動作,那么它可能不會提供任何顯着的性能提升,因此您可以堅持使用更簡單的查詢。
您當前的正則表達式將匹配僅由一位數組成的值,而不僅僅是第一個字符。 只需從結尾刪除$
,即“價值終結”。 它只會檢查第一個字符,除非你告訴它檢查更多。
^[:digit:]
將起作用,這意味着“開始值,后跟一個數字”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.