Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL regexp_只匹配与之匹配的返回行?_Postgresql - Fatal编程技术网

PostgreSQL regexp_只匹配与之匹配的返回行?

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()返回一组行。 如果没有匹配项,

这是我第一次使用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()
返回一组行。 如果没有匹配项,则不返回任何行

使用一个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}
,每个匹配组一个)