Thread: URL Decode function
Hi,
In my DB, one of my tables has a field that is URL Encoded (its value is a URL of course).
For example, the value:
is URL Encoded like this:
https%3A%2F%2Fwww.cosmohits.com%2FListasPopularidad%2FListaPopularidad%2F1-la-superlista
Is there a PostgreSQL function to URL Decode such field when performing a SELECT statement? I have not found anything in documentation.
Best regards,
Jorge Maldonado
Hi,
You can create your own "decode" function in pg like this example using varchars as input. Then simply create other overloaded "decode" functions for different input datatypes.
Regards,
Michael Vitale
JORGE MALDONADO wrote on 4/6/2021 12:34 AM:
You can create your own "decode" function in pg like this example using varchars as input. Then simply create other overloaded "decode" functions for different input datatypes.
CREATE OR REPLACE FUNCTION decode(expr varchar, search varchar, result varchar, dflt varchar) RETURNS varchar AS $$ BEGIN CASE WHEN expr = search THEN RETURN result; ELSE RETURN dflt; END CASE; END $$ LANGUAGE plpgsql;
Regards,
Michael Vitale
JORGE MALDONADO wrote on 4/6/2021 12:34 AM:
Hi,In my DB, one of my tables has a field that is URL Encoded (its value is a URL of course).For example, the value:is URL Encoded like this:https%3A%2F%2Fwww.cosmohits.com%2FListasPopularidad%2FListaPopularidad%2F1-la-superlistaIs there a PostgreSQL function to URL Decode such field when performing a SELECT statement? I have not found anything in documentation.Best regards,Jorge Maldonado
Virus-free. www.avast.com
På tirsdag 06. april 2021 kl. 14:56:10, skrev MichaelDBA <MichaelDBA@sqlexec.com>:
Hi,
You can create your own "decode" function in pg like this example using varchars as input. Then simply create other overloaded "decode" functions for different input datatypes.
CREATE OR REPLACE FUNCTION decode(expr varchar, search varchar, result varchar, dflt varchar) RETURNS varchar AS $$ BEGIN CASE WHEN expr = search THEN RETURN result; ELSE RETURN dflt; END CASE; END $$ LANGUAGE plpgsql;
Am I the only one who cannot find anything related to the OP's question in this answer?
I found this on SO:
CREATE OR REPLACE FUNCTION decode_url_part(p varchar) RETURNS varchar AS $$
SELECT convert_from(CAST(E'\\x' || string_agg(CASE WHEN length(r.m[1]) = 1 THEN encode(convert_to(r.m[1], 'SQL_ASCII'), 'hex') ELSE substring(r.m[1] from 2 for 2) END, '') AS bytea), 'UTF8')
FROM regexp_matches($1, '%[0-9a-f][0-9a-f]|.', 'gi') AS r(m);
$$ LANGUAGE SQL IMMUTABLE STRICT;
andreak@[local]:5432 13.2 test=# select decode_url_part('https%3A%2F%2Fwww.cosmohits.com%2FListasPopularidad%2FListaPopularidad%2F1-la-superlista');
┌──────────────────────────────────────────────────────────────────────────────┐
│ decode_url_part │
├──────────────────────────────────────────────────────────────────────────────┤
│ https://www.cosmohits.com/ListasPopularidad/ListaPopularidad/1-la-superlista │
└──────────────────────────────────────────────────────────────────────────────┘
(1 row)
┌──────────────────────────────────────────────────────────────────────────────┐
│ decode_url_part │
├──────────────────────────────────────────────────────────────────────────────┤
│ https://www.cosmohits.com/ListasPopularidad/ListaPopularidad/1-la-superlista │
└──────────────────────────────────────────────────────────────────────────────┘
(1 row)
--
Andreas Joseph Krogh
Andreas Joseph Krogh
ha, funny. I thought he was looking for something that acts like the oracle decode function. Now that I reread it, it is really talking about endcoding/decoding stuff.
my bad
Regards,
Michael Vitale
Andreas Joseph Krogh wrote on 4/6/2021 9:03 AM:
my bad
Regards,
Michael Vitale
Andreas Joseph Krogh wrote on 4/6/2021 9:03 AM:
På tirsdag 06. april 2021 kl. 14:56:10, skrev MichaelDBA <MichaelDBA@sqlexec.com>:Hi,
You can create your own "decode" function in pg like this example using varchars as input. Then simply create other overloaded "decode" functions for different input datatypes.
CREATE OR REPLACE FUNCTION decode(expr varchar, search varchar, result varchar, dflt varchar) RETURNS varchar AS $$ BEGIN CASE WHEN expr = search THEN RETURN result; ELSE RETURN dflt; END CASE; END $$ LANGUAGE plpgsql;Am I the only one who cannot find anything related to the OP's question in this answer?I found this on SO:
CREATE OR REPLACE FUNCTION decode_url_part(p varchar) RETURNS varchar AS $$ SELECT convert_from(CAST(E'\\x' || string_agg(CASE WHEN length(r.m[1]) = 1 THEN encode(convert_to(r.m[1], 'SQL_ASCII'), 'hex') ELSE substring(r.m[1] from 2 for 2) END, '') AS bytea), 'UTF8') FROM regexp_matches($1, '%[0-9a-f][0-9a-f]|.', 'gi') AS r(m); $$ LANGUAGE SQL IMMUTABLE STRICT;
andreak@[local]:5432 13.2 test=# select decode_url_part('https%3A%2F%2Fwww.cosmohits.com%2FListasPopularidad%2FListaPopularidad%2F1-la-superlista');
┌──────────────────────────────────────────────────────────────────────────────┐
│ decode_url_part │
├──────────────────────────────────────────────────────────────────────────────┤
│ https://www.cosmohits.com/ListasPopularidad/ListaPopularidad/1-la-superlista │
└──────────────────────────────────────────────────────────────────────────────┘
(1 row)
--
Andreas Joseph Krogh