函数“位置”不适用于文本函数中的空格

米赛尔

一个函数示例,该函数应返回子字符串中第一个字符的编号。

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位

a_horse_with_no_name

不确定根本原因是什么,但这是由于将参数声明为character(您不应该使用 charcharacter无论如何)引起的。

您可以看到,如果还使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章