2

我有一个列,其中包含如下所示的资源路径:

/apiv3/widgets/100
/apiv3/widgets/search
/apiv3/widgets/new

我正在尝试获得像这样的 LIKE 或 REG_EX 只会匹配以数字结尾的字符串

我尝试了一些事情,例如:

LIKE '\/apiv3\/widgets\/[0-9]%'
LIKE '\/apiv3\/widgets\/[^0-9]%'

如何匹配仅以任意长度的数值结尾的路径?

4

2 回答 2

13

使用正则表达式匹配 ( ~)
对于以数字结尾的字符串:

...
WHERE value ~ '\d$'

\d.. "digit" 类速记
$.. 匹配字符串末尾

E'\d$'将是不正确的。这不是转义字符串对于最后一个仅以数字
结尾的字符串:/

...
WHERE value ~ '/\d+$'

+.. 一个或多个原子
/.. 文字 /

快速测试:

SELECT x, x ~ '\d$' As one,  x ~ '/\d+$' As two
FROM  (
    VALUES
     ('/apiv3/widgets/100')
    ,('/apiv3/widgets/search')
    ,('/apiv3/widgets/new')
    ,('/apiv3/widgets/added_test17')
    ) AS t(x);

              x              | one | two
-----------------------------+-----+-----
 /apiv3/widgets/100          | t   | t
 /apiv3/widgets/search       | f   | f
 /apiv3/widgets/new          | f   | f
 /apiv3/widgets/added_test17 | t   | f
于 2013-06-26T23:38:57.230 回答
0

'SIMILAR' 正则表达式见第 9.7.2 节。LIKE不支持他们。

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

例子:

'abc' SIMILAR TO 'abc'      true
'abc' SIMILAR TO 'a'        false
'abc' SIMILAR TO '%(b|d)%'  true
'abc' SIMILAR TO '(b|c)%'   false
于 2013-06-26T23:42:15.130 回答