我需要创建startswith函数,该函数返回true if char(n)数据库
列以一些字符开头,这些字符
结尾可以包含空格。
空格应该像其他字符一样处理。
数据库有两个值a和aa。我希望startwith('a')(不带尾随空格)同时与aa和a匹配,但startwith('a')(带尾随空格)只与a匹配。
使用下面的示例数据
startswith( test, 'A') -- works
startswith( test, 'A ') -- returns wrong result : false
StartsWith(test, rpad('A',20) ) -- returns wrong result : false
应该返回true
但是
startswith( test, RPAD( 'A', 21))
应返回false,因为检查字符串结尾有多余的空间。
数据库包含具有char(20)类型列的测试列,而这不能
改变。
我试过下面的代码,但它返回false。
如何解决这个问题使它返回真值?
从9.1开始使用Postgres
安德鲁斯。
CREATE or replace FUNCTION public.likeescape( str text )
--
https://stackoverflow.com/questions/10153440/how-to-escape-string-while-matching-pattern-in-postgresql
RETURNS text AS $$
SELECT replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ;
$$ LANGUAGE sql IMMUTABLE;
CREATE or replace FUNCTION public.StartWith( cstr text, algusosa text )
RETURNS bool AS $$
SELECT $2 is null or $1 like likeescape($2) ||'%' ESCAPE '^' ;
$$ LANGUAGE sql IMMUTABLE;
create temp table test ( test char(20) ) on commit drop;
insert into test values ('A' );
insert into test values ('AA' );
select StartWith(test, 'A ' ) from test
我还将此发布到pgsql通用邮件列表。