正则表达式中的 postgres 函数参数 where 子句



我想知道这到底出了什么问题?

CREATE OR REPLACE FUNCTION maxNumber(int4)
RETURNS int4 AS $$
DECLARE
  v_year ALIAS FOR $1; 
BEGIN
  RETURN (
    SELECT count(*)
    FROM table
    WHERE stringcol ~ '[0-9]{2,3}.[0-9]{1,3}.v_year.[0-9]{1,3}'
  );
END;
$$ LANGUAGE 'plpgsql' VOLATILE;

它始终返回 0。SQL本身似乎可以工作。谢谢。

CREATE OR REPLACE FUNCTION maxNumber(int4)
RETURNS int4 AS $$
DECLARE
BEGIN
    RETURN (SELECT 
    coalesce(
      MAX(
        CAST(
          substring(stringcol, '[0-9]{1,3}$')
        AS int)
      )
    , 0)
    FROM table 
    WHERE stringcol ~ (E'\' || '.' || to_char($1, 'FM09') || E'\' || '.[0-9]{1,3}$'));
END;
$$ LANGUAGE 'plpgsql' VOLATILE;

那不应该更像:

(E'[0-9]{2,3}\.[0-9]{1,3}\.' || v_year || E'\.[0-9]{1,3}')

。如 in,您按原样使用文本v_year,而不是将其值与表达式的其他两面连接起来。

最新更新