PostgreSQL LIKE子句中的正则表达式

前端之家收集整理的这篇文章主要介绍了PostgreSQL LIKE子句中的正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我坚持使用一个简单的正则表达式.不知道我错过了什么.在正则表达式技能上有点生疏.

我想要匹配的表达是:

select * from table where value like '00[1-9]%'
-- (third character should not be 0)

所以这应该匹配’0090D0DF143A'(格式:文本),但它不是!

@a_horse commented一样,您必须使用 regular expression operator ~才能使用 bracket expressions.
但还有更多.我建议:
SELECT *
FROM   tbl
WHERE  value ~ '^00[^0]'

^ ..匹配字符串的开头(您的表达式可以匹配字符串中的任何位置).
[^ 0] ..匹配任何非“0”字符的括号表达式(字符类).

或者更好,但是:

SELECT *
FROM   tbl
WHERE  value LIKE '00%'       -- starting with '00'
AND    value NOT LIKE '000%'  -- third character is not '0'

为什么? LIKE不是那么强大,但通常比正则表达式更快.用廉价的LIKE表达来缩小候选人的范围可能要快得多.

通常,你会使用NOT LIKE’__ 0′,但由于我们已经在另一个谓词中建立了LIKE ’00%’,我们可以使用更窄(更便宜)的模式NOT LIKE’000′.

Postgres可以使用简单的btree索引作为左锚定表达式值LIKE ’00%'(对于大表很重要),而这可能不适用于更复杂的正则表达式. Postgres的最新版本可以使用索引来表示简单的正则表达式,因此它可能适用于此示例.细节:

> Difference between LIKE and ~ in Postgres

原文链接:https://www.f2er.com/postgresql/192189.html

猜你在找的Postgre SQL相关文章