Article
Irène Mykhailova · Mai 23, 2022 5m de lecture

Traitement des colonnes de type DATE et TIME lors de l'exécution des requêtes SQL du côté serveur (ObjectScript)

Le type DATE correspond au type de données du produit InterSystems %Date et le type TIME correspond à %Time.

%Date enregistre une date interne (premier élément séparé par une virgule de la variable spéciale $Horolog), et %Time enregistre l'heure interne (deuxième élément séparé par une virgule de la variable spéciale $Horolog). La logique côté serveur utilise donc la valeur au format (logique) interne, sauf si vous changez le mode d'affichage.
La méthode permettant de modifier le format d'affichage de la date et de l'heure internes dans la logique côté serveur dépend de la méthode d'exploitation.

Dans les exemples suivants, nous utiliserons le tableau Sample.Person.
(L'exemple d'exécution de la commande est présenté pour une instruction SELECT, mais il peut également être écrit pour une instruction de mise à jour.)

Pour essayer IRIS/IRIS for Health, téléchargez la documentation à partir de (Télécharger des échantillons à utiliser avec InterSystems IRIS),
ou à partir de Articles connexes (téléchargement de la définition de classe de l'échantillon (Sample.Person) et création de données d'échantillon), veuillez commencer par importer la classe Sample.Person et créer les données d'exemple.

Si vous essayez Caché/Ensemble, utilisez Sample.Person dans l'espace de noms SAMPLES.


(1) Si vous utilisez l'Embedded SQL

Pour changer le format d'affichage à l'aide d'Embedded SQL, utilisez #sqlcomple select.
Les valeurs suivantes peuvent être spécifiées.

  • Logical (par défaut)
  • Display
  • ODBC
  • Runtime

Documentation (IRIS) : Compilation du SQL intégré et du préprocesseur de macros【IRIS】
Documentation : Compilation du SQL intégré et du préprocesseur de macros

#sqlcompile select=ODBC
&sql(declare C1 Cursor for select ID,Name,DOB into :pid,:name,:dob from Sample.Person where ID<=5)
&sql(open C1)
for {
    &sql(fetch C1)
    if SQLCODE'=0 { quit }
   //Exemple d'affichage)1-Mastrolito,Susan T.-2013-01-01
    write pid,"-",name,"-",dob,!
}
&sql(close C1)

 

(2) Si vous utilisez le Dynamic SQL 

Pour changer le format d'affichage en SQL dynamique à l'aide de %SQL.Statement, utilisez la propriété %SelectMode.
Cette propriété doit être définie avant l'exécution de %Execute().

Les valeurs qui peuvent être définies sont les suivantes.

  • 0: mode logique
  • 1: mode ODBC
  • 2: mode d'affichage
SAMPLES>set sql="select ID,Name,DOB from Sample.Person where ID <= 5" SAMPLES>set stmt=##class(%SQL.Statement).%New() SAMPLES>set st=stmt.%Prepare(sql) SAMPLES>set rset=stmt.%Execute() SAMPLES>do rset.%Display()
ID      Name    DOB
1       Gallant,Yan N.  42146
2       Waal,Umberto G. 45359
3       Jenkins,Sam A.  37404
4       Marks,Milhouse B.       52043
5       Hernandez,Phyllis W.    64590 5 Rows(s) Affected
SAMPLES>

(3) Lorsque vous utilisez une requête de classe 

Pour changer le format d'affichage dans une requête de classe, utilisez le paramètre de définition de la requête : SELECTMODE.
Les valeurs qui peuvent être spécifiées sont les suivantes

  • RUNTIME (par défaut)
  • LOGICAL
  • DISPLAY
  • ODBC

Voici un exemple de définition.

Query NewQuery1() As %SQLQuery(SELECTMODE = "ODBC")&lt;br>{&lt;br>select ID,Name,DOB from Sample.Person where ID&lt;=5&lt;br>}

 

(4) Comment changer le format d'affichage des processus en cours

L'objet système $SYSTEM.SQL.SetSelectMode() peut être utilisé pour modifier le format d'affichage du processus en cours.
Les arguments et les valeurs de retour sont les suivants.

  • Spécifiez 0 (logique), 1 (ODBC) ou 2 (affichage) comme premier argument.
  • Le second argument est un argument de type pass-by-reference dont le résultat d'exécution est défini par %Status.
  • La valeur de retour est le numéro du mode d'affichage en cours.

Veuillez vous référer à la page du document ci-dessous pour plus de détails.

Les bases d'InterSystems SQL - Options d'affichage des données【IRIS】
Options d'affichage de CachéSQL Basics_Data

// Changement du format par défaut au format ODBC
SAMPLES>set cm=$system.SQL.SetSelectMode(1,.st)

SAMPLES>set sql="select ID,Name,DOB from Sample.Person where ID <= 5"

SAMPLES>set stmt=##class(%SQL.Statement).%New()

SAMPLES>set st=stmt.%Prepare(sql)

SAMPLES>set rset=stmt.%Execute()

SAMPLES>do rset.%Display()
ID      Name    DOB
1       Gallant,Yan N.  1956-05-23
2       Waal,Umberto G. 1965-03-10
3       Jenkins,Sam A.  1943-05-30
4       Marks,Milhouse B.       1983-06-28
5       Hernandez,Phyllis W.    2017-11-03 5 Rows(s) Affected
SAMPLES>

※Après avoir changé le format d'affichage d'un processus, si le format d'affichage est modifié pour chaque méthode d'exécution SQL, le dernier format d'affichage spécifié sera utilisé.

 

(5) Comment convertir le format d'affichage à l'aide de fonctions ObjectScript

Une autre méthode consiste à utiliser les fonctions de conversion d'affichage d'ObjectScript pour convertir le format interne en format d'affichage.

Pour les fonctions de datation,
 Affichage -> Format interne $ZDATEH(yyyymmdd,8) ou $ZDATE(yyyy-mm-dd,3)
 Interne -> Pour obtenir le résultat du format d'affichage YYYYYMMDD : $ZDATE(+$Horolog,8)
Si vous voulez obtenir le résultat de YYYYY-MM-DD : $ZDATEH(+$H,3), dans la fonction horaire
 Affichage -> format interne $ZTIMEH("HH:MM:SS")
 Interne -> Si vous voulez obtenir le résultat au format d'affichage HH:MM:SS : $ZTIMEH($piece($Horolog,"",2)), il existe également les fonctions $ZDATETIME() et $ZDATETIMEH() pour manipuler la date et l'heure.

Vous trouverez plus de détails sur les fonctions de date dans des documents suivants.
ObjectScript fonction【IRIS】
ObjectScript fonction

SAMPLES>write $horolog
63895,34979
SAMPLES>write $ZDATE(+$horolog,8)  /Conversion au format yyyymmdd>63895
SAMPLES>write $ZDATEH("2015-12-09",3)  // Conversion du format yyyy-mm-dd en format interne
63895
SAMPLES>write $ZTIME($piece($horolog,",",2))  // Conversion du format interne en format horaire
09:44:16
SAMPLES>write $ZTIMEH("10:01:11")  // Conversion de l'heure d'affichage au format interne
36071
SAMPLES>write $ZDATETIME($horolog,8)  // Conversion date/heure avec $horolog
20151209 09:45:15
SAMPLES>write $ZDATETIME($horolog,3)
2015-12-09 09:45:16
SAMPLES>
1
0 25
Discussion (0)3
Connectez-vous ou inscrivez-vous pour continuer