PG_全角转半角函数
2014-11-18 17:16
204 查看
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';
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';
相关文章推荐
- 用自定义函数替换SQL中的全角数字为半角数字
- 转 C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化
- [转]半角全角互转函数[JS版 VBS版]
- sql 实现全角与半角字符转换的处理函数
- php全角转半角函数
- 用自定义函数替换SQL中的全角数字为半角数字
- PHP 全角转换半角函数
- php全角字符转换为半角函数 实例代码
- C#中为什么两个函数对全角半角数字字符的处理方式不一样
- 半角全角互转函数[JS版 VBS版]
- 转全角,半角的函数
- Oracle全角和半角处理函数
- php全角字符转换为半角函数
- 转全角 转半角函数
- SQL全角半角标点互转函数
- Oracle全角和半角处理函数
- javascript,全角转半角函数
- 全角转半角的函数
- [转]C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化