Dans cette section : Référence : |
Plusieurs nouveaux types de données ont été définis pour le traducteur SQL pour supporter les champs date-heure dans le prédicat WHERE ou la liste de champs d'une déclaration SELECT.
De plus, les colonnes d'heure et d'estampille-temporelle peuvent être définies dans les sources de données FOCUS relationnelles, et sont accessibles au traducteur. Les valeurs peuvent être saisies à l'aide des déclarations INSERT et UPDATE, et s'affichent dans les déclarations SELECT.
Les éléments d'heure et d'estampille-temporelle (colonnes ou littéraux) se sont comparés dans les conditions. Les valeurs temps et horodatage peuvent être ajoutées ou soustraites les unes aux autres, le résultat étend la différence en nombre de secondes. Les expressions sous forme de T + 2 HEURES ou TS + 5 ANS sont autorisées. Ces expressions sont traduites en appels vers les fonctions date-heure, qui sont décrites dans Utiliser les fonctions .
Tous les formats de date pour les champs réels et virtuels du fichier Master sont convertis au format AAAAMMJJ. Si vous spécifiez un format qui manque un composant quelconque, le traducteur SQL fournit une valeur par défaut pour le composant manquant. Pour spécifier une partie d'une date, telle que le mois, utilisez un champ virtuel au format alphanumérique.
Dans le diagramme ci-après, fff représente la seconde à trois décimales (milisecondes) et ffffff représente la seconde à six décimales (microsecondes).
Les formats suivants sont autorisés comme données d'entrée au traducteur :
Format |
Attribut USAGE dans le fichier maître |
Composants de date |
---|---|---|
Date |
YYMD |
YYYY-MM-DD |
Heure |
HH |
HH |
Heure à minute |
HHI |
HH.MM |
Heure à seconde |
HHIS |
HH.MM.SS |
Heure à miliseconde |
HHISs |
HH.MM.SS.fff |
Heure à microseconde |
HHISsm |
HH.MM.SS.ffffff |
Année à heure |
HYYMDH |
YYYY-MM-DD HH |
Année à |
HYYMDI |
YYYY-MM-DD HH.MM |
Année à seconde |
HYYMDS |
YYYY-MM-DD HH.MM.SS |
Année à miliseconde |
HYYMDs |
YYYY-MM-DD HH.MM.SS.fff |
Année à microseconde |
HYYMDm |
YYYY-MM-DD HH.MM.SS.ffffff |
Remarque :
Comment : |
Le traducteur SQL supporte plusieurs fonctions qui renvoient des composants des valeurs date-heure. La déclaration EXTRACT s'emploie pour extraire des composants.
La fonction TRIM s'emploie pour enlever des formes de gauche et/ou de droite des valeurs de date, d'heure et d'estampille-temporelle. Consultez le manuel Utiliser les fonctions .
Les fonctions suivantes renvoient les composants date-heure sous forme de valeurs de nombre entier. Supposons que x est une valeur date-heure :
Fonction |
Valeur renvoyée |
---|---|
YEAR(x) |
année |
MONTH(x) |
numéro du mois |
DAY(x) |
numéro du jour |
HOUR(x) |
heure |
MINUTE(x) |
minute |
SECOND(x) |
seconde |
MILLISECOND(x) |
miliseconde |
MICROSECOND(x) |
microseconde |
Utilisation de la colonne d'estampille-temporelle TS dont la valeur est '1999-11-23 07:32:16.123456' :
YEAR(TS) = 1999 MONTH(TS) = 11 DAY(TS) = 23 HOUR(TS) = 7 MINUTE(TS) = 32 SECOND(TS) = 16 MILLISECOND(TS) = 123 MICROSECOND(TS) = 123456
Supposons qu'une source de données FOCUS appelée VIDEOTR2 contient un champ date-heure appelé TRANSDATE.
SQL SELECT TRANSDATE, YEAR(TRANSDATE), MONTH(TRANSDATE), MINUTE(TRANSDATE) FROM VIDEOTR2; FILE VIDSQL END
Le traducteur SQL produit les champs virtuels suivants pour les fonctions, suivis d'une requête TABLE pour afficher la sortie :
SET COUNTWIDTH=ON -SET SQLERRNUM = 0; DEFINE FILE VIDEOTR2 TEMP SQLDEF01/I4 MISSING ON NEEDS ALL = HPART(TRANSDATE,'YEAR','I4'); SQLDEF02/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MONTH','I2'); SQLDEF03/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MINUTE','I2'); END TABLEF FILE VIDEOTR2 PRINT TRANSDATE SQLDEF01 AS 'SQLDEF01' SQLDEF02 AS 'SQLDEF02' SQLDEF03 AS 'SQLDEF03' ON TABLE SET CARTESIAN ON ON TABLE SET ASNAMES ON ON TABLE SET HOLDLIST PRINTONLY END
La sortie est :
TRANSDATE SQLDEF02 SQLDEF04 SQLDEF05 1999/06/20 04:14 1999 6 14 1991/06/27 02:45 1991 6 45 1996/06/21 01:16 1996 6 16 1991/06/21 07:11 1991 6 11 1991/06/20 05:15 1991 6 15 1999/06/26 12:34 1999 6 34 1919/06/26 05:45 1919 6 45 1991/06/21 01:10 1991 6 10 1991/06/19 07:18 1991 6 18 1991/06/19 04:11 1991 6 11 1998/10/03 02:41 1998 10 41 1991/06/25 01:19 1991 6 19 1986/02/05 03:30 1986 2 30 1991/06/24 04:43 1991 6 43 1991/06/24 02:08 1991 6 8 1999/10/06 02:51 1999 10 51 1991/06/25 01:17 1991 6 17
Utilisez la fonction ANSI standard suivante pour extraire des composants date-heure sous forme de valeurs de nombre entier :
EXTRACT(component FROM value)
où :
est l'un des composants suivants : YEAR, MONTH, QUARTER, DAY, WEEKDAY, HOUR, MINUTE, SECOND, MILLISECOND, ou MICROSECOND.
Est un champ, une constante ou une expression date-heure DATE, TIME ou TIMESTAMP.
Par exemple, les choses suivantes sont équivalentes.
EXTRACT(YEAR FROM TS) YEAR(TS)
SELECT D. EXTRACT(YEAR FROM D), EXTRACT(MONTH FROM D), EXTRACT(DAY FROM D) FROM T
Cette requête produit des lignes semblables à celles qui suivent :
1999-01-01 1999 1 1 2000-03-03 2000 3 3
WebFOCUS |