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

muf*_*fin 0 sql postgresql pattern-matching

如果我的表格内容如下所示:

id | value
------------
1  |CT 6510
2  |IR 52
3  |IRAB
4  |IR AB
5  |IR52
Run Code Online (Sandbox Code Playgroud)

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

2  |IR 52
5  |IR52
Run Code Online (Sandbox Code Playgroud)

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

select * from public.record where value ilike 'ir%'
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?谢谢。

Tom*_*ico 6

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

SELECT * from public.record where value ~ '^IR ?\d';
Run Code Online (Sandbox Code Playgroud)

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

SELECT * from public.record where value ~* '^ir ?\d';
Run Code Online (Sandbox Code Playgroud)

符号的意思是:

^: 字符串的开头

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

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

有关更多信息,请参阅:正则表达式匹配运算符

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