Greenplum小把戲 - 簡單函數實現URL解碼(URL Decode)- 一樣適用於Deepgreen和PostgreSQL

新年第一篇文章,從一個簡單的小把戲開始吧~~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

相關文章
相關標籤/搜索