【发布时间】:2014-07-20 15:03:56
【问题描述】:
如何实现字符串的包含运算符,如果左字符串包含在右字符串中,则返回true。
操作员名称可以是任何名称。我尝试了@@ 和下面的代码,但是
select 'A' @@ 'SAS'
返回 false。
如何解决?
CREATE OR REPLACE FUNCTION public.contains(searchFor text, searchIn text)
RETURNS bool
AS $BODY$ BEGIN
RETURN position( searchFor in searchIn)<>0;
END; $BODY$ language plpgsql immutable RETURNS NULL ON NULL INPUT;
CREATE OPERATOR public.@@ (
leftarg = text,
rightarg = text,
procedure = public.contains
);
在 windows 和 linux 中使用 Postgres 9.1 及以上版本。
select contains('A' , 'SAS' )
按预期返回真。
更新
我在答案中尝试了 9.1 代码:
CREATE OR REPLACE FUNCTION public.contains(searchFor text, searchIn text)
RETURNS bool
LANGUAGE sql IMMUTABLE
AS $BODY$
SELECT position( searchFor in searchIn )<>0;
$BODY$;
CREATE OPERATOR public.<@ (
leftarg = text,
rightarg = text,
procedure = public.contains
);
但出现错误
ERROR: column "searchin" does not exist
LINE 5: SELECT position( searchFor in searchIn )<>0;
如何使它在 9.1 中工作?在 9.3 中它可以工作。
使用
“x86_64-unknown-linux-gnu 上的 PostgreSQL 9.1.2,由 gcc-4.4.real (Debian 4.4.5-8) 4.4.5 编译,64 位”
【问题讨论】:
标签: postgresql operators plpgsql contains