"Avec Oracle Database, un replace('chaine', null, 'chaine') renvoie 'chaine' alors qu'avec PostgreSQL un replace('chaine', null, 'chaine') renvoie NULL. Est-il possible d'avoir le même comportement entre les 2 SGBD ?"
Réponse :
Pour avoir le comportement d'Oracle Database pour replace, Il est possible avec PostgreSQL d'utiliser un coalesce sur le ou les arguments pouvant être NULL. Exemple :
Code : Tout sélectionner
select version() ;
version
-----------------------------------------------------------------------------------------------------------------------
PostgreSQL 11beta1 (Debian 11~beta1-2.pgdg+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 7.3.0-19) 7.3.0, 64-bit
(1 ligne)
select replace('toto', coalesce(null,''),'a') ;
replace
---------
toto
(1 ligne)
select replace('toto', 'o',coalesce(null,'')) ;
replace
---------
tt
(1 ligne)
select replace('toto', coalesce(null,''),coalesce(null,'')) ;
replace
---------
toto
(1 ligne)
Code : Tout sélectionner
Connecté à :
Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
select replace('toto', coalesce(null,''),'a') from dual;
REPL
----
toto
select replace('toto', null,'a') from dual;
REPL
----
toto
select replace('toto', 'o',coalesce(null,'')) from dual;
RE
--
tt
select replace('toto', 'o',null) from dual;
RE
--
tt
select replace('toto', coalesce(null,'') ,coalesce(null,'')) from dual;
REPL
----
toto
select replace('toto', null, null) from dual;
REPL
----
toto