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