一个函数示例,该函数应返回子字符串中第一个字符的编号。
CREATE OR REPLACE FUNCTION dbo.test(
IN tstr character varying,
IN delimiter character)
RETURNS int AS
$BODY$
BEGIN
return position(delimiter in tstr);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
叫她:
select dbo.test('11',' ');
我们得到结果1,但是子字符串中没有空格!如何解决?我在由gcc编译的x86_64-pc-linux-gnu上使用PostgreSQL 10.7(Ubuntu 7.3.0-27ubuntu1〜18.04)7.3.0,64位
不确定根本原因是什么,但这是由于将参数声明为character
(您不应该使用 char
或character
无论如何)引起的。
您可以看到,如果还使用character
参数显式调用position():
postgres=# select position(' '::character in '11');
position
----------
1
(1 row)
将函数声明更改为:
CREATE OR REPLACE FUNCTION dbo.test(
IN tstr character varying,
IN delimiter character varying)
...
您的示例函数将起作用。
请注意,像这样的简单函数最好写成SQL
函数:
CREATE OR REPLACE FUNCTION dbo.test(IN tstr character varying, IN delimiter character varying)
RETURNS int
AS
$BODY$
select position(delimiter in tstr);
$BODY$
LANGUAGE sql immutable;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句