应该返回子字符串中第一个字符编号的函数示例。
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,但是子字符串中没有空格!如何解决? 我在xcc_64-pc-linux-gnu上使用PostgreSQL 10.7,由gcc编译(Ubuntu 7.3.0-27ubuntu1〜18.04)7.3.0,64位
答案 0 :(得分:2)
不确定根本原因是什么,但这是由于将参数声明为character
(无论如何,您都是shouldn't be using 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;