Twi*_*Kit 16 regex mysql numeric
我正在尝试找到第一个字符不是数字的行.我有这个:
SELECT DISTINCT(action) FROM actions
WHERE qkey = 140 AND action NOT REGEXP '^[:digit:]$';
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何确保它只检查第一个字符......
Mar*_*ers 24
首先,您的查询中存在轻微错误.它应该是:
NOT REGEXP '^[[:digit:]]'
Run Code Online (Sandbox Code Playgroud)
请注意双方括号.您还可以将其重写为以下内容以避免匹配空字符串:
REGEXP '^[^[:digit:]]'
Run Code Online (Sandbox Code Playgroud)
另请注意,使用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 >= ':'
Run Code Online (Sandbox Code Playgroud)
然后在(qkey,action)上添加一个索引.阅读起来不那么令人愉快,但它应该提供更好的性能.如果每个qkey只有少量动作,那么它可能不会提供任何显着的性能提升,因此您可以坚持使用更简单的查询.
Cha*_*rch 11
您当前的正则表达式将匹配仅由一位数组成的值,而不仅仅是第一个字符.只需删除$它的末尾,这意味着"价值终结".它只会检查第一个字符,除非你告诉它检查更多.
^[:digit:] 将起作用,这意味着"开始价值,然后是一位数字".
| 归档时间: |
|
| 查看次数: |
32779 次 |
| 最近记录: |