PG_全角转半角函数

CREATE OR REPLACE FUNCTION convertstring(text)
  RETURNS text AS
$$
  DECLARE
   len INTEGER;
   retval text;
   tmp text;
   asciival INT4;
   difference INT4 := ascii('A')-ascii('A');
   fullCase char[] := ARRAY[ '!', '#', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '{', '|', '}' ];
 
  BEGIN
    --文字数の取得
    SELECT textlen($1) INTO len;
   
    SELECT '' INTO retval;
   
    --繰り返す
    FOR i IN 1..len LOOP
      --
      SELECT substring($1, i, 1) INTO tmp;
      SELECT ascii(tmp) INTO asciival;
     
 BEGIN
   --全角から半角に変更
   IF (asciival >= ascii('A')) AND (asciival <= ascii('Z')) THEN
     SELECT asciival-difference INTO asciival;
   ELSIF (asciival >= ascii('a')) AND (asciival <= ascii('z')) THEN
     SELECT asciival-difference INTO asciival;
   ELSIF (asciival >= ascii('0')) AND (asciival <= ascii('9')) THEN
     SELECT asciival-difference INTO asciival;
   ELSE
  FOR j IN 0..array_length(fullCase , 1 ) LOOP
    IF (asciival = ascii(fullCase[j]))  THEN
    SELECT asciival-difference INTO asciival;
    END IF;
  END LOOP;
   END IF;
 END;
      SELECT chr(asciival) INTO tmp;
      SELECT textcat(retval, tmp) INTO retval;
    END LOOP;
    RETURN retval;
  END;
  $$
    LANGUAGE 'plpgsql';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值