我正在尝试在MySQL中查询电话号码,这些号码不是以“33”和10个字符开头,我尝试使用:
^(?!33)[0-9]{10}$
这是我的疑问:
SELECT calldate, src, dst, billsec, disposition, accountcode FROM cdr WHERE (calldate BETWEEN @inicio AND @fin) AND CHAR_LENGTH(src) = 4 AND disposition LIKE 'ANSWERED' AND billsec >= 1 AND dst RLIKE '^(?!33)[0-9]{10}$';
但是不要使用MySQL,而是使用崇高的文本3.我收到了错误:
ERROR 1139 (42000): Got error 'repetition-operator operand invalid' from regexp
如何在MySQL中使用带有该模式的正则表达式。
答案 0 :(得分:2)
来自docs:
MySQL使用Henry Spencer的正则表达式实现, 旨在符合POSIX 1003.2。 MySQL使用 扩展版本,支持使用执行的模式匹配操作 SQL语句中的REGEXP运算符。
POSIX正则表达式不支持Lookaheads。最好的解决方案可能是在select语句中添加另一个子句:
SELECT calldate, src, dst, billsec, disposition, accountcode
FROM cdr
WHERE (calldate BETWEEN @inicio AND @fin)
AND CHAR_LENGTH(src) = 4
AND disposition LIKE 'ANSWERED'
AND billsec >= 1
AND dst RLIKE '^[0-9]{10}$'
AND dst NOT RLIKE '^33'
答案 1 :(得分:0)
您应该删除否定前瞻:^[0-9]{10}$
只需使用其他语句即可避免以33
:AND dst NOT LIKE '33%'
开头的内容。
这样做也可能更快。