Postgresql:以“IR”开头的值的模式匹配

Posted

技术标签:

【中文标题】Postgresql:以“IR”开头的值的模式匹配【英文标题】:Postgresql : Pattern matching of values starting with "IR" 【发布时间】:2015-06-10 05:59:13 【问题描述】:

如果我的表格内容看起来像这样:

id | value
------------
1  |CT 6510
2  |IR 52
3  |IRAB
4  |IR AB
5  |IR52

我只需要获取内容以“IR”开头然后是数字的那些行(忽略空格)。这意味着我应该得到这些值:

2  |IR 52
5  |IR52

因为它以“IR”开头,而下一个非空格字符是整数。与 IRAB 不同,它也以“IR”开头,但“A”是下一个字符。我只能查询以 IR 开头的所有内容。但其他 IR 也出现了。

select * from public.record where value ilike 'ir%'

我该怎么做?谢谢。

【问题讨论】:

你应该使用正则表达式。 【参考方案1】:

您可以使用运算符~,它执行正则表达式匹配。 例如:

SELECT * from public.record where value ~ '^IR ?\d';

添加星号以执行不区分大小写的匹配。

SELECT * from public.record where value ~* '^ir ?\d';

符号表示:

^:字符串的开头

?: 前面的字符(这里是空格)是可选的

\d:全数字,相当于[0-9]

查看更多信息:Regular Expression Match Operators

另见这个问题,非常有用:difference-between-like-and-in-postgres

【讨论】:

谢谢你的解释,给了我一个如何做正则表达式的快速入门。

以上是关于Postgresql:以“IR”开头的值的模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

查找以特定模式开头的属性名称

PostgreSQL:计算一行中包含值的列数

Postgresql字符串匹配在哪里

匹配除以单词开头之外的所有内容的模式[重复]

Oracle Like(模式匹配)子句

Oracle Like(模式匹配)子句