为什么以下指令返回FALSE
?
SELECT '[1-3]{5}' SIMILAR TO '22222' ;
根据Postgres的说法,我找不到有什么问题......
答案 0 :(得分:2)
运营商is defined as:
string SIMILAR TO pattern
所以第一个参数是您要比较的字符串。第二个参数是要比较的正则表达式。
你需要:
SELECT '22222' SIMILAR TO '[1-3]{5}';
答案 1 :(得分:2)
试
SELECT '22222' ~ '[1-3]{5}'
SIMILAR不是POSIX标准
SIMILAR TO运算符返回true或false,具体取决于其模式是否与给定字符串匹配。它类似于LIKE,除了它使用SQL标准的正则表达式定义来解释模式。 SQL正则表达式是LIKE表示法和常用正则表达式表示法之间的奇怪交叉。
...
POSIX正则表达式提供了比LIKE和SIMILAR TO运算符更强大的模式匹配方法。许多Unix工具(如egrep,sed或awk)使用的模式匹配语言与此处描述的类似。
http://www.postgresql.org/docs/9.2/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP
答案 2 :(得分:1)
您的基本错误已得到解答
更重要的是,根本不要使用SIMILAR TO
。这完全没有意义:
使用LIKE
或正则表达式匹配~
或其他模式匹配运算符:
对于1到3之间的5位数,请使用the expression @Thomas provided。
如果你真的想要1到3之间的5个相同的数字,就像你的例子所示,我建议返回参考:
SELECT '22222' ~ '([1-9])\1{4}'
相关答案更多解释:
Deleting records with number repeating more than 5