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)
我该怎么做呢?谢谢。
您可以使用 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