2010-05-27 3 views
3

J'ai 2 champs dans une table test1:Informix: manipulation datetime

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 de onlydate et onlytime champ et définissez-le sur le champ dateandtime. Comment je fais ça?

Répondre

1

Vous pouvez concaténer les deux valeurs en tant que texte, et de le jeter à datetime comme:

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

Votre solution fonctionne bien lorsque les colonnes sont toutes dans une table, et 'DBDATE = 'Y4MD-''. Lorsque les valeurs doivent être transférées entre les tables, vous finissez probablement par utiliser une instruction INSERT ou MERGE. Lorsque DBDATE est défini sur d'autres formats (par exemple 'DBDATE = DMY4 /' ou 'DBDATE = MDY4 /'), la mise en forme effectuée sur la dateonly pour la convertir en chaîne signifie qu'elle ne peut pas être reconvertie en DATETIME. Les exigences de format pour la distribution sont strictes. –

3

Les questions de base sont les suivants:

  1. Conversion DATE à DATETIME - utilisation Extend.
  2. Conversion de DATETIME en INTERVAL - utilisez la soustraction.

L'assemblage de ces deux concepts et appliqués à sélectionner 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 une heure INTERVALLE DE MINUTE; Vous pouvez ajouter une ANNÉE DE DATE À LA SECONDE et une HEURE D'INTERVALLE À MINUTE, en obtenant une ANNÉE DE DATE À LA SECONDE. Vous ne pouvez pas ajouter deux valeurs DATETIME.

Alors, répondant strictement à votre question, vous écririez:

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

(je cours avec DBDATE = Y4MD- de telle sorte que la date des œuvres présentées littérales comme prévu Pour insérer de manière fiable la DATE constante quelle que soit la. paramètre de DBDATE, utilisez MDY(5,31,2010).)