mdy2yymd
18 Octobre 2008 , Rédigé par Milan Publié dans #Sql
// SQL PSM (Persistent Stored Modules) ou SQL PL (Procedural Language) ou SPL
// Certains fichiers systèmes AS/400 gérent les dates à l'aide de 2 champs,
// La fonction SQL ci-dessous les rend un peu plus pratique - pour le tri - et lisible...
drop function mdy2yymd £
create function mdy2yymd (
cent varchar(1) ,
mdy varchar(6) )
returns char(8)
a1: begin atomic
declare yy char ( 2 ) ;
declare yymd char ( 8 ) ;
if cent='0' then
set yy ='19';
elseif cent='1' then
set yy ='20';
end if;
set yymd = yy ||
substr ( mdy , 5 , 2 ) ||
substr ( mdy , 1 , 2 ) ||
substr ( mdy , 3 , 2 ) ;
return yymd ;
end £
select mdy2yymd('0', '123198') date from sysibm.sysdummy1 £
Voici un lien vers la doc "IBM i"
Et un vers "DB2 LUW"
Attn, concernants notamment les "control statements", il existe des différences souvent étranges entre les 2 systèmes... Par exemple, sur AS/400, la fonction ci-dessus peut être écrite avec un
case
when cent='0' then set yy ='19';
when cent='1' then set yy ='20';
end case;
alors que cette instruction de test n'est pas possible dans une fonction sur DB2 LUW... Bravo le "i" !
/image%2F1025633%2F20151122%2Fob_b0e74c_pam007i.png)