1

My following SQL is not working but when I use same regular expression in Java, it's work fine

SELECT * FROM tbl WHERE REGEXP_LIKE
(MESSAGE, '^(92|0)?(3[0-9]{9})\\*([0-9]{4})\\*(([0-9]{3})|1000)$')

Please help what I am doing wrong.

i am comparing following string

03211234090*0000*75 
4

2 回答 2

3

您的搜索模式中有一个错误:\\*. 这应该是\*,因为你只需要一个\来逃避*

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最后一个星号之后的数字被接受并检索该行。

于 2012-12-26T11:42:04.077 回答
3

真正的问题应该是:它是如何在 java 中工作的?
由于字符串03211234090*0000*75与您的正则表达式不匹配 - las 部分(在第二个 asterix 之后需要有 3 个数字或 1000,而您只有 2 个)

于 2012-12-26T11:44:11.233 回答