RegEx中的Postgres函数参数Where子句

时间:2014-12-10 09:35:52

标签: sql regex function postgresql plpgsql

我想知道这到底是怎么回事?

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本身似乎有效。 感谢。

2 个答案:

答案 0 :(得分:1)

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;

答案 1 :(得分:0)

不应该更像:

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

...就像在,你按原样使用文字v_year,而不是将其值与表达式的另外两个边连接。