模式与SQL匹配

问题描述 投票:0回答:2

我仍然是编写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但是两者都没有用。不确定我做错了什么。任何帮助表示赞赏。

谢谢

postgresql pattern-matching
2个回答
0
投票

你可以用“%”来解决这个问题。我喜欢可能会导致问题,因此您可以在将列转换为小写以匹配所有情况后使用“喜欢”。

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

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这样的多重匹配。谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.