为什么我的功能只返回邮政编码的一半?
我的意思是,如果我做
insert into address(zip_code) values(99-100)
它没有正常工作,因为它只添加" 99 - "。
CREATE FUNCTION normalize_zip_code() RETURNS trigger AS $$
BEGIN
if length(NEW.zip_code)<=4 and length(NEW.zip_code)>=6 then
RAISE EXCEPTION 'Wrong zip code!';
elsif length(NEW.zip_code)=6 and (SUBSTRing(NEW.zip_code, 3, 1)='-') then
NEW.zip_code:= concat((SUBSTRing(NEW.zip_code, 1, 2))::varchar(2),(SUBSTRING(NEW.zip_code, 3, 1))::varchar(1), (SUBSTRING(NEW.zip_code, 3, 5))::varchar(3));
return NEW;
else
NEW.zip_code := concat((SUBSTRing(NEW.zip_code, 1, 2))::varchar(2),'-' (SUBSTRING(NEW.zip_code, 3, 5))::varchar(3));
RETURN NEW;
end if;
END;
$$ language plpgsql;