我的以下 SQL 不工作,但是当我在 Java 中使用相同的正则表达式时,它工作正常
SELECT * FROM tbl WHERE REGEXP_LIKE
(MESSAGE, '^(92|0)?(3[0-9]{9})\\*([0-9]{4})\\*(([0-9]{3})|1000)$')
请帮助我做错了什么。
我正在比较以下字符串
03211234090*0000*75
最佳答案
您的搜索模式中存在错误:\\*
。这应该是 \*
,因为您只需要一个 \
来转义 *
。
SELECT *
FROM tbl
WHERE REGEXP_LIKE(MESSAGE, '^(92|0)?(3[0-9]{9})\*([0-9]{4})\*(([0-9]{3})|1000)$')
另一个问题是在 \*(([0-9]{3})|1000)$
部分 - 字符串的最后部分。您提供的字符串 03211234090*0000*75
不以 0-9 或“1000”之间的三位数字结尾。
$
表示字符串必须以紧接其前的表达式结尾。
作为解决方案,如果您的业务逻辑允许,请尝试放置 \*(([0-9]{2, 3})|1000)$
。这将允许接受最后一个星号后的两位或三位数字或 1000
,并检索该行。
关于java - Oracle Sql 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040030/