[PostgreSQL]全角和半角字符转换函数

我们知道,客户许多时候录入数据时,并不注意输入法是否是全角模式,然后就造成输入的内容,有的是全角有的是半角,造成我们做分析统计时的不便,为此,编写相应的函数。当然这个过程应尽量在前台完成,但如果针对已经存在的数据,下面提供的两个函数就比较方便了。

1、全角转换为半角函数

--© 2014,swish,原版首发:https://blog.qdac.cc/?p=1281,自由使用,保留版权
create or replace function CnFullToHalf(s character varying)
returns character varying
as
$$
declare
  retval character varying;
  c character varying;
  l integer;
begin
l=length(s);
retval='';
while l>0 loop
  c=left(s,1);
  if c=' ' then
    retval=retval||' ';
  elsif c>='!' and c<='~' then
    retval=retval || chr(ascii('!')+ascii(c)-ascii('!'));
  else
    retval=retval||c;
  end if;
  s=substring(s,2,l-1);
  l=l-1;
end loop;
return retval;
end;
$$language plpgsql immutable;

2、半角转全角

--© 2014,swish,原版首发:https://blog.qdac.cc/?p=1281,自由使用,保留版权
create or replace function CnHalfToFull(s character varying)
returns character varying
as
$$
declare
  retval character varying;
  c integer;
  l integer;
begin
l=length(s);
retval='';
while l>0 loop
  c=ascii(left(s,1));
  if c=32 then--空格
    retval=retval||' ';
  elsif c>=33 and c<=126 then
    retval=retval || chr(ascii('!')+c-ascii('!'));
  else
    retval=retval||chr(c);
  end if;
  s=substring(s,2,l-1);
  l=l-1;
end loop;
return retval;
end;
$$language plpgsql immutable;

 

分享到: