Les questions de base sont les suivants:
- Conversion DATE à DATETIME - utilisation Extend.
- 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)
.)
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. –