模式与SQL匹配

时间:2018-01-04 05:15:15

标签: postgresql pattern-matching

我仍然是编写SQL查询的新手。 我试图找到具有特定模式匹配的所有行,这些行是constant_string_1的组合,后跟任何整数组合,后跟另一个constant_string_2。 所以对于我来说,我试图找到匹配的所有行:

  • Roger_117788_Maryland
  • Roger_188_Maryland
  • Roger_211_Maryland

我试过了: select * from cust where cust_string ilike 'Roger_[0-9]_Maryland'

但是该查询不会生成0结果。我也试过使用[:digit:]和\ d但是两者都没有用。不确定我做错了什么。任何帮助表示赞赏。

由于

2 个答案:

答案 0 :(得分:0)

您只需使用"%"即可完成此操作。我喜欢可能会导致问题,所以你可以使用"喜欢"将您的列转换为小写以匹配所有情况。

select * from cust where lower(cust_string) like 'roger%maryland';

答案 1 :(得分:0)

以下工作。我最终使用了regexp_instr,但是我的查询没有给出结果的是多位数匹配。

select * from cust where regexp_instr(cust_string, '^(Roger_)[0-9]{1,10}__Maryland$') > 0'

这做了两件事。一个它实现了上面的结果集,即Roger_188_Maryland等。但它也删除了任何多次出现的模式,因此对于ex,它消除了像Roger_188_Roger_211_Maryland这样的多重匹配。谢谢大家的帮助。