将 regexp_matches 结果存储在变量中

Store regexp_matches result in variables

在 psql 函数中我使用 regexp_matches。结果应该进入 2 var db_datum_von_stringdb_datum_von_string。但是,即使模式匹配 2 个字符串,第二个也始终为 null。

第一个值是正确的。我想问题出在 res[2] 但我不知道它是什么。

请注意 SELECT regexp_matches('1234ffdsafdsa 4554 ', '[0-9]+', 'g') 完美运行并且 return 2 行。

CREATE OR REPLACE FUNCTION ajl_TEST_datum_check(
      arg_datum_id integer,
      req_datum integer,
      flag integer
       ) RETURNS text AS $$
DECLARE
      db_datum text;
      db_datum_von_string text;
      db_datum_bis_string text;
      temp integer;
BEGIN
      SELECT datum.datum  INTO  db_datum
      FROM datum
      WHERE datum_id = arg_datum_id;

--- the issue starts here

    SELECT res[1], res[2] INTO db_datum_von_string, db_datum_bis_string
    FROM (SELECT regexp_matches(db_datum, '[0-9]+', 'g') res) y;

--- end of trouble


    IF db_datum_bis_string IS NULL THEN
        RETURN db_datum_von_string;
    ELSE 
        RETURN TRUE;
    END IF;

END;
$$ LANGUAGE plpgsql;

您的查询returns两行单元素数组值:

SELECT res[1], res[2]
FROM (
    SELECT regexp_matches('1234ffdsafdsa 4554 ', '[0-9]+', 'g') res
) y;

 res  | res 
------+-----
 1234 | 
 4554 | 
(2 rows)

您应该将行的元素转换为数组:

SELECT res[1], res[2]
FROM (
    SELECT array_agg(res) res
    FROM (
        SELECT unnest(regexp_matches('1234ffdsafdsa 4554 ', '[0-9]+', 'g')) res
        ) y
    ) x;

 res  | res  
------+------
 1234 | 4554
(1 row)