3 votes

Informix : manipulation des dates

J'ai 2 champs dans une table test1 :

onlydate DATE
onlytime DATETIME HOUR TO MINUTE

et 1 champ dans une table test2 :

dateandtime DATETIME YEAR TO SECOND

Maintenant, je dois ajouter la valeur du champ onlydate et onlytime et la placer dans le champ dateandtime. Comment dois-je m'y prendre ?

3voto

Jonathan Leffler Points 299946

Les questions fondamentales sont les suivantes :

  1. Conversion de DATE en DATETIME -- utiliser EXTEND.
  2. Conversion de DATETIME en INTERVALLE -- utiliser la soustraction.

Assemblage de ces deux concepts et application à SELECT uniquement :

create temp table td(dateonly date not null, timeonly datetime hour to minute);
insert into td values('2010-05-31', '06:30');
select extend(dateonly, year to second) + 
       (timeonly - datetime(00:00) hour to minute) from td;

Le résultat est ce que vous voulez :

DATETIME YEAR TO SECOND
2010-05-31 06:30:00

Soustraire minuit de timeonly le convertit en un INTERVALLE D'HEURE À MINUTE ; vous pouvez additionner un DATETIME ANNÉE À LA SECONDE et un INTERVALLE D'HEURE À MINUTE, pour obtenir un DATETIME ANNÉE À LA SECONDE. Vous ne pouvez pas additionner deux valeurs DATETIME.

Donc, pour répondre strictement à votre question, vous écrirez :

INSERT INTO Test2(DateAndTime)
     SELECT EXTEND(DateOnly, YEAR TO SECOND) + 
                  (TimeOnly - DATETIME(00:00) HOUR TO MINUTE) AS DateAndTime
       FROM Test1;

(Je fonctionne avec DBDATE=Y4MD- pour que la date littérale indiquée fonctionne comme prévu. Pour insérer la constante DATE de manière fiable, quel que soit le paramètre de DBDATE, utilisez MDY(5,31,2010) .)

1voto

Michał Niklas Points 15907

Vous pouvez concaténer les deux valeurs en tant que texte, et les convertir en date comme suit :

update datetime_test
   set dateandtime = (dateonly || ' ' || timeonly || ':00')::
                      datetime year to second

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X