PostgreSQL 8.4,修剪错误
我有功能PostgreSQL 8.4,修剪错误,postgresql,trim,Postgresql,Trim,我有功能 CREATE OR REPLACE FUNCTION "public"."GetSoilCod" ( "cod1" integer = 0, "cod2" integer = 0, "cod3" integer = 0, "cod4" integer = 0, "cod5" integer = 0, "cod6" integer = 0, "cod7" integer = 0 ) RETURNS varchar AS $body$ de
CREATE OR REPLACE FUNCTION "public"."GetSoilCod" (
"cod1" integer = 0,
"cod2" integer = 0,
"cod3" integer = 0,
"cod4" integer = 0,
"cod5" integer = 0,
"cod6" integer = 0,
"cod7" integer = 0
)
RETURNS varchar AS
$body$
declare result varchar;
BEGIN
result = cast($1 as varchar(2)) || '.' ||
cast($2 as varchar(2)) || '.' ||
cast($3 as varchar(2)) || '.' ||
cast($4 as varchar(2)) || '.' ||
cast($5 as varchar(2)) || '.' ||
cast($6 as varchar(2)) || '.' ||
cast($7 as varchar(2));
return trim('.0' from result);
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
当我执行这个函数时,一个或多个代码被除以10,这个函数的结果是错误的
示例:
SELECT * FROM "public"."GetSoilCod"(10, 0, 0, 0, 0, 0, 0);
return: 1
expected: 10
SELECT * FROM "public"."GetSoilCod"(10, 20, 0, 0, 0, 0, 0);
return: 10.2
expected: 10.20
为什么最后修剪为0(零)?我只想修剪“.0”(点零)
如果执行此查询:
SELECT * FROM "public"."GetSoilCod"(10, 20, 0, 0, 0, 0, 1);
all its OK
return & expected is: 10.20.0.0.0.0.1
或:
一切都好。回报和预期为:10.20.0.0.0.1
我的错在哪里 Trim不会将参数视为要删除的单个字符串,而是将其视为无序的字符列表,所有这些字符都必须删除,而不管它们从开头、结尾或两者的出现顺序如何 调用
trim('0'来自结果)代码>与结果中的修剪('0')相同
和这两者都会导致从字符串末尾删除所有0
和
SELECT trim('0.' from '100.00')
'1'
尝试改用regexp\u replace
:
SELECT regexp_replace('100.0.2.0.0.0', '(\\.0)+$', '')
100.0.2
SELECT regexp_replace('100.0.2.0.0.0', '(\\.0)+$', '')
100.0.2