S Q L / 4 0 0 Nouveautés V2, nouvelles fonctions. Les nouveaux types de variables sont reconnus: DATE dates TIME horaires TIMESTAMP horodatage VARCHAR(x) ALLOCATE(Y) zones de longueur variable en l'absence de "WITH NOT NULL" la valeur nulle est admise Tout cela ammène de nouvelles fonctions de nouveaux prédiquats |
rappel sur l'ordre SELECT SELECT ------- * toutes les variables de la(des) table(s) ou <expression1>, <expression2>,... expressions valides: + un nom de variable + une constante + un calcul (+ * - /) (QTE * PU) , (SALBRU * 13) etc ... + une fonction (redéfinition de variable,moyenne,etc..) |
nouveautés : MAX(exp) valeur la plus grande rencontrée (y compris dates) ex: MAX(SALBRU) plus grand salaire ex: MAX(PRXACHAT PRXMOYEN) la plus grande des deux colonnes MIN(exp) valeur la plus petite rencontrée (y compris dates) idem fonction MAX VAR(exp) variance la formule est VARV(x) = SUM(x**2)/COUNT(x) - (SUM(x)/COUNT(x))**2 pour 10,12,7 la variance est 4,22 STDDEV(exp) écart type la formule est STDDEV(x) = SQRT(VAR(X)) pour 10,12,7 l'écart type est 2,04 ZONED(exp) représentation numérique étendu d'une expression numérique ABSVAL(exp) renvoie la valeur absolue d'une expression numérique |
SQRT(exp) renvoie la racine carrée MOD(exp1 exp2) renvoie le reste de la division des deux arguments. TRANSLATE(exp) conversion minuscule/MAJUSCULE d'une chaîne STRIP(exp, BOTH , [C]) LEADING TRAILLING supprime le(s) caractère(s) "C" (dft = blanc) à gauche (LEADING), à droite (TRAILLING) ou les deux, de la chaîne indiquée. Le résultat est de longueur variable. VALUE(exp1 exp2 exp...) renvoie la première valeur non nulle de la liste des expressions. |
Intéressant sous la forme (VAR, 'cst') pour attribuer une valeur par défaut ('cst') aux variables pouvant contenir une valeur nulle. CHAR(date) renvoie la représentation caractère d'une date (suivant DATFMT sur STRSQL ou CRTSQLxxx) --------------------- MANIPULATION DE DATES --------------------- DATE(expression) convertit "expression" au format DATE formats admis: TIMESTAMP (extrait la partie DATE) 7 ALPHA (format julien AAAAJJJ) ALPHA représentant une date éditée (AAAA-MM-JJ, par exemple) numérique représentant (nbr de jours - 1) depuis le 1er janvier de l'AN 1. |
DAY, MONTH, YEAR renvoient la partie concernée d'une expression date (voir ci dessus + variable de type DATE) DAYS(expression) renvoie le nombre de jours -1 séparant cette date du 1er janvier de l'an 1. MANIPULATION D'HORAIRES TIME(expression) convertit "expression" au format TIME formats admis: TIMESTAMP (extrait la partie TIME) ALPHA représentant une heure éditée (HH:MM:SS) HOUR, MINUTE, SECOND renvoient la partie concernée d'une expression TIME (voir ci dessus + variable de type TIME) |
TIMESTAMP(expression) converti "expression" (horodatage édité) en horodatage TIMESTAMP(date heure) produit l'horodatage correspondant à la date et l'heure indiquées (microsecondes à 0) NOTION DE DUREE: Durée explicites YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS, MICROSECONDS servent aux calculs (ARRIVEE + 6 MONTHS + 15 DAYS) ainsi que CURRENT DATE, CURRENT TIME et CURRENT TIMEZONE (CURRENT TIME ZONE représente le décalage avec GMT ==> CURRENT TIME - CURRENT TIMEZONE = temps universel) |
durées numériques pour une date = valeur numérique 8,0 aaaaammjj pour une heure = valeur numérique 6,0 hhmmss pour un horodatage = 20,6 (décimales = microsecondes) CURRENT DATE + 0615 = aujourd'hui + 6 mois et 15 jours INCREMENTATION, DECREMENTATION, DIFFERENCE AJOUT (+) TOUJOURS Date + durée = date heure + durée = heure si le mois est modifié en dépassant 12, il est ajusté et l'année est incrémentée (idem jours, minutes, secondes) |
RETRAIT (-) DATE - durée = DATE : il s'agit d'une décrémentation DATE - DATE = durée : il s'agit d'une différence la durée est exprimée en durée numérique s'il s'agit d'une colonne résultat. une durée explicite peut être utilisée lors d'un test WHERE (DAT1 - DAT2) > 2 MONTHS EXEMPLES + SELECT NOM, (CURRENT DATE - ARRIVEE) FROM SQLDB/PERSONP1 + SELECT NOM, PRENOM, VALUE(FONCTION, '*inconnue') FROM SQLDB/PERSONP1 + SELECT TRANSLATE(ADRESSE) ... |
si vos fichiers contiennent des dates numériques 6,0 , l'expression: date(substr(digits(datnum), 5, 2) !! '/' !! substr(digits(datnum), 3, 2) !! '/' !! substr(digits(datnum), 1, 2)) est une date valide , et peut donc être utilisée dans un test par rapport à CURRENT DATE par exemple. + toutes les commandes de plus de deux mois : WHERE date(substr(digits(datcde), 5, 2) !! '/' !! substr(digits(datcde), 3, 2) !! '/' !! substr(digits(datcde), 1, 2)) < current date - 2 MONTHS est valide. |