PG_全形轉半形函式
阿新 • • 發佈:2019-02-18
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';