新年第一篇文章,從一個簡單的小把戲開始吧~~sql
---------------------------------------------函數
以前社區裏有朋友在問,如何在Greenplum裏面實現URL解碼?post
首先確定不少朋友不知道爲何要使用URL編碼和解碼,簡單來講,使用這種技術就是爲了防止在URL傳遞過程當中有亂碼出現,咱們平時使用的一、二、三、4這種通用字符固然不會出現亂碼問題,可是在國內尤爲是漢字來講,若是處理不當,極有可能出現亂碼。採用特殊字符替換的方式,將原有的字符替換爲標準的字符,而後進行URL傳遞,這種方式成爲URL編碼(URL Encode);反之,對已經作了URL編碼的字符,進行解碼,叫作URL解碼(URL Decode)。編碼
在Greenplum及PostgreSQL體系中,並無先天帶有URL Decode處理函數,可是咱們能夠根據解碼處理邏輯,建立一個函數來處理該過程,話很少說,直接上例子:url
函數總體邏輯以下:code
CREATE OR REPLACE FUNCTION url_decode(input text) RETURNS text LANGUAGE plpgsql IMMUTABLE STRICT AS $$ DECLARE bin bytea = ''; byte text; BEGIN FOR byte IN (select (regexp_matches(input, '(%..|.)', 'g'))[1]) LOOP IF length(byte) = 3 THEN bin = bin || decode(substring(byte, 2, 2), 'hex'); ELSE bin = bin || byte::bytea; END IF; END LOOP; RETURN convert_from(bin, 'utf8'); END $$;
建立後執行方法及結果以下:regexp
postgres=# select url_decode('2019%e5%b9%b41%e6%9c%881%e6%97%a5%ef%bc%8c%e7%a5%9d%e5%a4%a7%e5%ae%b6%e5%9c%a8%e6%96%b0%e7%9a%84%e4%b8%80%e5%b9%b4%e9%87%8c%e5%b7%a5%e4%bd%9c%e9%a1%ba%e5%88%a9%e3%80%81%e5%ae%b6%e5%ba%ad%e5%b9%b8%e7%a6%8f%ef%bc%81'); url_decode ------------------------------------------------------ 2019年1月1日,祝你們在新的一年裏工做順利、家庭幸福! (1 row)
最後:若是個人文章有幫到您,請點贊支持一下,謝謝~input