Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU
Publicité
Attn's blog

dt9 & dt10

23 Novembre 2008 , Rédigé par Milan Publié dans #Sql

 

// Deux fonctions qui permettent de transformer une pseudo date en vraie date.


// Dans DB2 LUW une fonction, qui utilise alors le “SQL inline”, ne peut utiliser de Handler, c'est la raison pour laquelle DT10 appelle la procédure DT10A, qui elle, a accès à toutes les instructions SQL PL.


// Les choses sont plus simples sur AS400 où une telle gymnastique n'est pas nécessaire...

Bravo le i !



values dt9(991124)#

values dt9(19991225)#


values dt10('1987-12-25')#


values dt10(dt9(19980513))#

values dt10(dt9(380722))#


values dt10(dt9(701133))#



****************************

 

create function dt9


-- une pseudo date 6 ou 8 numérique amj ou samj

(zn dec(8, 0))


-- une pseudo date alpha formatée iso avec séparateur

-- (qui peut être vérifiée

-- et transformée en vrai date par dt10)

returns varchar(10)

 

language sql

 

a010: begin atomic

declare za char(8);

declare aan decimal(4, 0);

declare aa char(4);

declare mm char(2);

declare jj char(2);

 

-- l'année

set aan = zn/10000;

-- s'il s'agit d'une date sur 6, complément 19 ou 20.

if aan <= 99 then

if aan > 40 then

set aan=aan+1900;

else

set aan=aan+2000;

end if;

end if;

 

set aa = digits(aan);


--dans une zone alpha pour extraction

set za = digits(zn);


-- le mois

set mm = substr(za, 5, 2);

 

-- le jour

set jj = substr(za, 7, 2);

 

-- assemblage final

return aa concat '-' concat mm concat '-' concat jj;

end #


 

 

 

****************************

 

  


create function dt10


-- une pseudo date alpha avec séparateur

(za10 varchar(10))


-- une vraie date, ou null si la date passée est incorrecte.

returns date

 

aa: begin atomic

declare madate date;

call dt10a(za10, madate);

return madate;

end #





create procedure dt10a(in za10 varchar(10), out madate date)

reads sql data

language sql


a010: begin

declare errw int default 0;

declare continue handler for sqlexception set errw=1;

 

set madate = cast(za10 as date);

 

if errw =0 then return;

else

set madate = null;

return errw;

end if;

 

end #

Publicité
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article