Dans cette section : Comment : |
Une expression date-heure renvoie des composants de date et d'heure. Vous pouvez créer ces expressions à l'aide des nombreuses fonctionnalités date-heure fournies. Pour plus de détails à propos des fonctions date-heure, consultez Utiliser les fonctions .
SET DATEFORMAT = option
où :
Pour consulter un exemple, consultez Spécifier l'ordre des composants de date pour un champ date-heure.
Une valeur date-heure externe est une constante au format de caractères provenant de l'une des sources suivantes :
Une constante date-heure ou une valeur date-heure telle qu'elle apparaît dans un fichier de caractères possède l'un des formats suivants :
time_string [date_string] date_string [time_string]
Une constante date-heure dans une expression COMPUTE, DEFINE ou WHERE doit utiliser un des formats suivants :
DT(time_string [date_string]) DT(date_string [time_string])
Une constante date-heure dans une expression IF doit utiliser un des formats suivants :
'time_string [date_string]' 'date_string [time_string]'
Si la valeur ne comprend ni blancs ni caractères spéciaux, les guillemets simples ne sont pas nécessaires. Notez que le préfixe DT n'est pas supporté dans les critères IF.
où :
14:30:20:99 (99 milliseconds) 14:30 14:30:20.99 (99/100 seconds) 14:30:20.999999 (999999 microseconds) 02:30:20:500pm
Notez que la seconde peut comprendre une virgule ou peut être suivi de deux points :
Si un format de chaîne numérique comptant plus de huit chiffres est rencontré, il est traité comme une chaîne combinée date-heure au format Hn. Voici des exemples de constantes de dates de chaînes numériques :
99 1999 19990201
1999/05/20 5 20 1999 99.05.20 1999-05-20
January 6 2000
Remarque :
Le préfixe DT peut être utilisé dans une expression COMPUTE, DEFINE, ou WHERE pour attribuer un littéral date-heure à un champ date-heure. Par exemple :
DT2/HYYMDS = DT(20051226 05:45);
DT3/HYYMDS = DT(2005 DEC 26 05:45);
DT4/HYYMDS = DT(December 26 2005 05:45);
La requête suivante définit DATEFORMAT à MYD :
SET DATEFORMAT = MYD DEFINE FILE EMPLOYEE DTFLDYYMD/HYYMDI = DT(APR 04 05); END TABLE FILE EMPLOYEE PRINT CURR_SAL DTFLDYYMD END
La sortie affiche que le littéral de date naturel 'APR 04 05' est interprété par 5 Avril, 1904 :
CURR_SAL DTFLDYYMD -------- --------- $11,000.00 1904/04/05 00:00 $13,200.00 1904/04/05 00:00 $18,480.00 1904/04/05 00:00 $9,500.00 1904/04/05 00:00 $29,700.00 1904/04/05 00:00 $26,862.00 1904/04/05 00:00 $21,120.00 1904/04/05 00:00 $18,480.00 1904/04/05 00:00 $21,780.00 1904/04/05 00:00 $16,100.00 1904/04/05 00:00 $9,000.00 1904/04/05 00:00 $27,062.00 1904/04/05 00:00
Le fichier de transaction délimité par une virgule, DTTRANS, comprend un champ ID et un champ date-heure qui se compose de la date (à huit chiffres) et de l'heure (au format heure:minute:seconde) :
01, 20000101 02:57:25,$ 02, 19991231 14:05:35,$
Comme les dates dans le fichier de transaction sont au format de chaîne numérique, la définition DATEFORMAT n'est pas utilisée, et les dates sont saisies dans l'ordre AMJ.
Le fichier de transaction suivant est aussi valable. Il comprend des dates de chaîne formatées qui se conforment à la définition DATEFORMAT par défaut, MJA :
01, 01/01/2000 02:57:25,$ 02, 12/31/1999 14:05:35,$
Le fichier Master suivant décrit la source de données FOCUS appelée DATETIME, qui reçoit ces valeurs :
FILE=DATETIME, SUFFIX=FOC ,$ SEGNAME=DATETIME, SEGTYPE=S0 ,$ FIELD=ID, ID, USAGE = I2 ,$ FIELD=DT1, DT1, USAGE=HYYMDS ,$
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME AND COMPUTE NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL); RAISETIME/HYYMDIA = DT(20000101 09:00AM); WHERE CURR_JOBCODE LIKE 'B%' END
La sortie est :
LAST_NAME FIRST_NAME NEWSAL RAISETIME --------- ---------- ------ --------- SMITH MARY $14,520.00 2000/01/01 9:00AM JONES DIANE $20,328.00 2000/01/01 9:00AM ROMANS ANTHONY $23,232.00 2000/01/01 9:00AM MCCOY JOHN $20,328.00 2000/01/01 9:00AM BLACKWOOD ROSEMARIE $23,958.00 2000/01/01 9:00AM MCKNIGHT ROGER $17,710.00 2000/01/01 9:00AM
Dans une clause WHERE, une constante date-heure doit être au format DT() :
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE WHERE TRANSDATE GT DT(2000/01/01 02:57:25) END
La sortie est :
CUSTID TRANSDATE ------ --------- 1118 2000/06/26 05:45 1237 2000/02/05 03:30
Dans une clause IF, une constante date-heure comprenant des blancs doit être entre guillemets simples :
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE IF TRANSDATE GT '2000/01/01 02:57:25' END
Remarque : le préfixe DT d'une constante date-heure n'est pas pris en charge dans une clause IF.
La sortie est :
CUSTID TRANSDATE ------ --------- 1118 2000/06/26 05:45 1237 2000/02/05 03:30
Lorsqu'elles sont utilisées avec STANDARD et STANDARDU, qui sont les paramètres DTSTANDARD, les valeurs date-heure suivantes peuvent être lues comme des données d'entrée :
Valeur entrée | Description |
---|---|
14:30[:20,99] | Une virgule sépare les composants d'heure au lieu d'un point. |
14:30[:20.99]Z | Temps universel |
15:30[:20,99]+01 15:30[:20,99]+0100 15:30[:20,99]+01:00 | Ce sont semblables aux formats ci-dessus, à l'heure de l'Europe centrale |
09:30[:20.99]-05 | Ceci est semblable aux formats ci-dessus, à l'heure de la côte est américaine |
Notez que ces valeurs sont stockées de façon identique à l'intérieur avec la définition STANDARDU. En ce qui concerne la définition STANDARD, tout ce qui suit « Z », « + » ou « - » est ignoré.
Les seules opérations directes pouvant s'effectuer sur les variables date-heure et les constantes sont la comparaison avec une expression logique et l'attribution simple de la forme A = B.
Les calculs n'autorisent que l'attribution directe dans les types de données suivants : alphanumérique vers alphanumérique, numérique vers numérique, date vers date et date-heure vers date-heure. Toute autre opération s'effectue au moyen d'un ensemble de fonctionnalités date-heure.
Deux valeurs date-heure quelconques peuvent être comparées, même si leurs longueurs ne sont par pareilles.
Si un champ date-heure supporte les valeurs manquantes, les champs comprenant la valeur manquante doit avoir une valeur plus importante que tout autre champ date-heure. Pour exclure les valeurs manquantes de la sortie de rapport en utilisant un opérateur GT ou GE dans le test de sélection, nous vous conseillons donc d'ajouter le champ de contrainte NE MISSING au test de sélection :
date_time_field {GT|GE} date_time_value AND date_time_field NE MISSING
L'attribution est autorisée entre les formats date-heure de longueurs égales ou différentes. Attribuer une valeur date-heure à 10 octets à une valeur date-heure à 8 octets a pour résultat la truncation de l'élément de la microseconde (aucune fonction arrondi s'effectue). Attribuer une valeur courte à une valeur longue a pour résultat la définition des trois chiffres de poids faible de la microseconde à zéro.
D'autres opérations, y compris l'arithmétique, la concaténation, EDIT et LIKE, effectuées sur les opérandes date-heure ne sont pas supportées. Les opérateurs préfixe utilisant des champs alphanumériques sont supportés.
Considérez le fichier Master DATETIM2 :
FILE=DATETIM2, SUFFIX=FOC ,$ SEGNAME=DATETIME, SEGTYPE=S0 ,$ FIELD=ID, ID, USAGE = I2 ,$ FIELD=DT1, DT1, USAGE=HYYMDS, MISSING=ON,$
Le champ DT1 supporte les valeurs manquantes. Considérez la requête suivante :
TABLE FILE DATETIM2 PRINT ID DT1 END
La sortie de rapport résultant indique qu'il y a une valeur manquante dans le champ DT1 de l'instance avec ID=3.
ID DT1 -- --- 1 2000/01/01 02:57:25 2 1999/12/31 00:00:00 3 .
La requête suivante sélectionne les valeurs de DT1 qui sont plus importantes que 2000/01/01 00:00:00 et qui ne sont pas manquantes.
TABLE FILE DATETIM2 PRINT ID DT1 WHERE DT1 NE MISSING AND DT1 GT DT(2000/01/01 00:00:00); END
La valeur manquante n'est pas comprise dans la sortie de rapport :
ID DT1 -- --- 1 2000/01/01 02:57:25
Considérez la requête suivante utilisant la source de données VIDEOTR2 :
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE AND COMPUTE DT2/HYYMDH = TRANSDATE; T1/HHIS = TRANSDATE; WHERE DATE EQ 2000 END
La sortie est :
CUSTID TRANSDATE DT2 T1 ------ --------- --- -- 1118 2000/06/26 05:45 2000/06/26 05 05:45:00 1237 2000/02/05 03:30 2000/02/05 03 03:30:00
WebFOCUS |