加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL LIKE子句中的正则表达式

发布时间:2020-12-13 16:19:13 所属栏目:百科 来源:网络整理
导读:我坚持使用一个简单的正则表达式.不知道我错过了什么.在正则表达式技能上有点生疏. 我想要匹配的表达是: select * from table where value like '00[1-9]%'-- (third character should not be 0) 所以这应该匹配’0090D0DF143A'(格式:文本),但它不是! 与
我坚持使用一个简单的正则表达式.不知道我错过了什么.在正则表达式技能上有点生疏.

我想要匹配的表达是:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读