簡體   English   中英

MySql不像Regexp?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM