postgres中使用“LIKE”进行模式匹配

时间:2013-07-18 22:42:48

标签: postgresql sql-like

如何使用“LIKE”查找其字符串中包含例如“R011”,“R012”,“R021”,“R022”的行?我不希望选择“R01”或“R02”。< / p>

SELECT 'Code'
FROM "public"."Test"
WHERE 'Code' LIKE 'R01%';

在“Code”列中名为“Test”的表中我使用了Above查询但结果是:

no rows found.

行如下所示:

R(01-04,11)  Personnel professionnel des
R01  M้decins, dentistes et v้t้r.
R011 M้decins sp้cialistes
R022 Omnipraticiens et m้decins en m้decine

2 个答案:

答案 0 :(得分:2)

SELECT *
FROM   public."Test"
WHERE  "Code" LIKE 'R0__';

'R0'之后需要2个字符。

使用单引号毫无意义。首先阅读identifiers and key words in the manual。我的建议:根本不要使用大小写混合标识符 然后继续information about pattern matching

更具体地说,您可以使用正则表达式,如:

WHERE  "Code" ~ '^R0\d\d$';  -- allowing any 2 digits

甚至:

WHERE  "Code" ~ '^R0[12]{2}$';  -- allowing only 1 and 2

答案 1 :(得分:0)

您想使用下划线而不是百分号字符。下划线_匹配单个字符,其中百分比%匹配零个或多个字符。

select 'R011' like 'R01_'
# true

select 'R01' like 'R01_'
# false

或者更好的是,你可以使用正则表达式来匹配十进制字符。

select 'R011' ~ 'R\\d{3}'

http://www.postgresql.org/docs/9.2/static/functions-matching.html