Création d'une expression date-heure

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 .


Haut de page

x
Syntaxe : Spécifier l'ordre des composants de date dans un champ date-heure
SET DATEFORMAT = option

où :

option
Peut être l'une des valeurs suivantes : MDY, DMY, YMD, or MYD. MDY est la valeur par défaut pour le format Anglais E.U.

Pour consulter un exemple, consultez Spécifier l'ordre des composants de date pour un champ date-heure.


Haut de page

x
Spécifier une valeur 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ù :

time_string
Ne peut pas comprendre des blancs. Les composants d'heure sont séparés par deux points et peuvent être suivis de AM, PM, am ou pm. Par exemple :
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 :

  • S'il y a deux points après la seconde, la valeur qui la suit représente la milliseconde. Il n'est pas possible d'exprimer la microseconde ou la nanoseconde avec cette notation.
  • Une virgule dans la deuxième valeur indique la fraction décimale d'une seconde. Une microsecode est exprimée par six chiffres décimaux. Une nanoseconde est exprimée par neuf chiffres décimaux.
date_string
Peut être aux trois formats suivants :
  • Format de chaîne numérique est exactement quatre, six ou huit chiffres. Les chaînes à quatre chiffres sont considérées comme une année (le siècle doit être précisé). Le mois et le jour sont fixés au premier janvier. Les chaînes à six et à huit chiffres se composent de deux ou quatre chiffres représentant l'année, suivis de deux chiffres représentant le mois, suivis de deux chiffres représentant le jour. Le paramètre DATEFORMAT est décrit dans le chapitre Spécifier l'ordre des composants de date dans un champ date-heure parce que l'ordre du composant est fixé avec ce format.

    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
  • Format de chaîne formaté est composé d'un jour à un ou deux chiffres, un mois à un ou deux chiffres, et une année à deux ou quatre chiffres séparés par des espaces, des barres obliques, des traits d'union ou des points. Les trois parties doivent être présentes et suivre le paramètre DATEFORMAT décrit dans Spécifier l'ordre des composants de date dans un champ date-heure. Si aucun des trois champs est à quatre chiffres, il est interprété comme l'année, et les deux autres champs doivent suivre l'ordre indiqué par la définition DATEFORMAT. Voici des exemples de constantes de date-chaîne formatées.
    1999/05/20
    5 20 1999
    99.05.20
    1999-05-20
  • Format de chaîne traduite se compose du nom du mois entier ou abrégé. L'année doit aussi être présente sous forme de deux ou quatre chiffres. S'il manque le jour, le premier jour du mois est la valeur par défaut ; si le jour est présent, il peut se composer d'un ou de deux chiffres. Si la chaîne comprend une année à deux chiffres et un jour à deux chiffres, ils doivent être dans l'ordre défini par DATEFORMAT. Par exemple :
    January 6 2000

Remarque :



Exemple : Attribuer des littéraux Date-heure

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);


Exemple : Spécifier l'ordre des composants de date pour un champ date-heure

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


Exemple : Lecture de valeurs date-heure dans un fichier de transaction

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 ,$


Exemple : Utilisation d'une valeur date-heure dans une commande COMPUTE
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


Exemple : Utilisation d'une valeur date-heure dans des critères WHERE

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


Exemple : Utilisation d'une valeur date-heure dans des critères IF

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


Exemple : Spécification de valeurs d'entrée date-heure universelles

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é.



x
Manipulation de valeurs date-heure

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.



Exemple : Test de valeurs date-heure manquantes

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


Exemple : Attribution d'un format différent à une colonne date-heure

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