PostgreSQL regexp_只匹配与之匹配的返回行?
这是我第一次使用regexp\u匹配,我发现使用它只会返回与SELECT子句中所有regexp\u匹配的行 例如:PostgreSQL regexp_只匹配与之匹配的返回行?,postgresql,Postgresql,这是我第一次使用regexp\u匹配,我发现使用它只会返回与SELECT子句中所有regexp\u匹配的行 例如: SELECT parameters, regexp_matches(parameters, 'a=(\d+)'), regexp_matches(parameters, 'b=(\d+)') FROM table; 将返回参数为a=1&b=1但不是a=1或b=1 这就像是一个where条款。这是为什么?这是因为regexp\u matches()返回一组行。 如果没有匹配项,
SELECT parameters,
regexp_matches(parameters, 'a=(\d+)'),
regexp_matches(parameters, 'b=(\d+)')
FROM table;
将返回参数为a=1&b=1
但不是a=1
或b=1
这就像是一个where条款。这是为什么?这是因为
regexp\u matches()
返回一组行。
如果没有匹配项,则不返回任何行
使用一个regexp进行搜索,例如:
SELECT
parameters,
regexp_matches(parameters, '[a|b]=(\d+)')
FROM a_table;
或者,如果要为a
和b
获取两列:
SELECT parameters, a, b
FROM (
SELECT
parameters,
regexp_matches(parameters, 'a=(\d+)') a,
null b
FROM a_table
UNION
SELECT
parameters,
null,
regexp_matches(parameters, 'b=(\d+)')
FROM a_table
) s;
另一种解决方法是,除了要查找的模式之外,还要在字符串的末尾进行匹配
SELECT parameters,
regexp_matches(parameters, '(a=(\d+))|$'),
regexp_matches(parameters, '(b=(\d+))|$')
FROM table;
然后您可能需要执行一些其他处理,因为任何缺少该模式的字符串都将在结果中显示为{NULL}
(或{NULL,NULL}
,每个匹配组一个)