• Aucun résultat trouvé

Fonction pour les bits

Dans le document CHEZ LE MÊME ÉDITEUR Du même auteur C. S (Page 122-130)

Les opérateurs suivants sont disponibles jusqu’à 64 bits (BIGINT). On peut en utiliser certains en passant des paramètres en base 10, en binaire ou de type chaîne de caractères.

EXP(n) e (2.71828183) à la puissance n.

FLOOR(n) Plus grand entier ≤ à n. retourne 15.

LN(n) Logarithme népérien de n.

LOG(n)(m,n) Logarithme de n dans une base m.

MOD(m,n) Reste de la division entière de m par n.

POW(m,n) m puissance n.

RADIANS(n) Conversion de degrés en radians. retourne 1.5707963267949.

RAND() Flottant aléatoire (à 14 décimales) entre 0 et 1.

retourne 17,57.

ROUND(m,n) Arrondi à une ou plusieurs décimales. retourne 17,57.

SIGN(n) Retourne le signe d’un nombre (-1, 0 ou 1).

SIN(n) Sinus de n exprimé en radians de 0 à 2 pi. retourne 0.5.

SINH(n) Sinus hyperbolique de n.

SQRT(n) Racine carrée de n.

TAN(n) Tangente de n exprimée en radians de 0 à 2 pi.

TRUNCATE(n,m) Coupure de n à m décimales. retourne 15.7.

Tableau 4-15 Fonctions numériques (suite)

Fonction Objectif Exemple

Tableau 4-16 Fonctions pour les bits

Fonction Objectif Exemple

OR : | OU bits à bits. b'0100' b'1100' retourne 12.

AND : & ET bits à bits. b'0100' b'1100' retourne 4.

XOR : ^ OU exclusif bits à bits. b'0100' b'1100' retourne 8.

SHL : << Décalage à gauche de n posi-tions.

3 2 retourne 12.

SHR : >> Décalage à droite de n positions. b'0100' 2 retourne 1.

Complément à 1 : ~ Inversion de chaque bit. 3+(~3+1) retourne 1 (ici on pro-gramme le complément à 2).

BIN(n) Chaîne qui représente la valeur binaire de n.

Dates

Le tableau suivant décrit les principales fonctions pour les dates :

BIT_LENGTH(c) Taille de la chaîne en bits. retourne 24 (3 octets).

HEX(ns) Chaîne en hexadécimal repré-sentant ns (nombre ou chaîne).

retourne 'FE'.

OCT(n) Chaîne en octal représentant n. retourne 14.

OCTET_LENGTH(c) Synonyme de LENGTH().

UNHEX(c) Fonction inverse de HEX. retourne 'SQL'.

Tableau 4-16 Fonctions pour les bits (suite)

Fonction Objectif Exemple

BIT_LENGTH('GTR') HEX(254)

OCT(12)

UNHEX('53514C')

Tableau 4-17 Fonctions pour les dates

Fonction Objectif Retour

ADDDATE(date,n) Ajoute n jours à une date (heure). DATE ou DATETIME ADDTIME(date1,date2) Ajoute les deux dates avec date1 TIME ou

DATETIME, et date2 TIME.

Heure courante ('HH:MM:SS' or HHMMSS). INT ou DATE CURRENT_TIMESTAMP,

CURRENT_TIMES-TAMP()ou NOW()

Date et heure courantes ('YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMS).

INT ou DATETIME DATE(datet) Extrait une date à partir d’une expression

de type DATETIME.

DATE DATEDIFF(date1,date2) Nombre entier de jours entre les 2 dates. INT DATE_ADD(date,INTERVAL expr type) Ajoute un intervalle à une date (heure).

expr désigne un intervalle. type indique comment interpréter le format de l’expres-sion (voir tableau suivant).

DATE ou DATETIME

DATE_FORMAT(date,format) Présente la date selon un format (voir tableau suivant).

VARCHAR DATE_SUB(date,INTERVAL expr type) Soustrait un intervalle à une date (heure)

Mêmes paramètres que DATE_ADD.

DATE ou DATETIME

DAYNAME(date) Nom du jour en anglais. VARCHAR

DAY(date) ou DAYOFMONTH(date) Numéro du jour dans le mois (0 à 31). INT DAYOFYEAR(date) Numéro du jour dans l’année (0 à 366). INT

EXTRACT(type FROM date) Extrait une partie d’une date selon un type d’intervalle (comme pour DATE_ADD).

INT FROM_DAYS(n) Retourne une date à partir d’un nombre de

jours (le calendrier année 0 débute à n=365).

DATE

FROM_UNIXTIME(nunix[,format]) Retourne une date (heure) à partir d’une estampille Unix (nombre de jours depuis le 1/1/1970). Utilisation possible d’un format.

INT ou DATETIME

HOUR(time) Extrait l’heure d’un temps. INT

LAST_DAY(date) Dernier jour du mois d’une date (heure). DATE LOCALTIME, LOCALTIME(),

LOCALTI-MESTAMP, LOCALTIMESTAMP()

Synonymes de NOW().

MAKEDATE(annee,njour) Construit une date à partir d’une année et d’un nombre de jours (>0, si njour>365, l’année s’incrémente automatiquement).

DATE

MAKETIME(heure,minute,seconde) Construit une heure. TIME MICROSECOND(date) Extrait les microsecondes d’une

date-heure.

INT MINUTE(time) Extrait les minutes d’un temps. INT MONTH(date), MONTHNAME(date) Retourne respectivement le numéro et le

nom du mois d’une date-heure.

INT, VARCHAR NOW() Date et heure courantes au format

'YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMSS.

DATETIME ou INT PERIOD_DIFF(int1,int2) Nombre de mois séparant les deux dates

au format YYMM or YYYYMM.

INT SECOND(time) Extrait les secondes d’un temps. INT SEC_TO_TIME(secondes) Construit une heure au format 'HH:MM:SS'

ou HHMMSS.

TIME ou INT STR_TO_DATE(c,format) Construit une date (heure) selon un certain

format. C’est l’inverse de DATE_FORMAT().

DATE ou DATETIME ou TIME SUBDATE(date,n) Retranche n jours à une date (heure). DATE ou

DATETIME SUBTIME(date1,date2) Retranche date2 (TIME) à date1 (TIME ou

DATETIME).

TIME ou DATETIME SYSDATE() Date et heure courantes au format

'YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMSS (différence avec NOW voir chapitre 1).

DATETIME ou INT TIME(datetime) Extrait le temps d’une date-heure. TIME

Tableau 4-17 Fonctions pour les dates (suite)

Fonction Objectif Retour

TIMEDIFF(tdate1,tdate2) Temps entre 2 temps ou 2 dates ou 2 dates-heure.

TIME TIMESTAMP(date) Construit une estampille à partir d’une date

(heure).

TIMESTAMP TIMESTAMPADD(intervalle,int,date) Ajoute à la date (heure) un intervalle (int)

du type FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, ou YEAR.

TIMESTAMP

TIMESTAMPDIF(intervalle,int,date) Retranche à la date (heure) un intervalle du type (idem précédent).

TIMESTAMP TIME_TO_SEC(time) Retourne le nombre de secondes

équiva-lent au temps.

INT TO_DAYS(date) Retourne un nombre de jours à partir d’une

date ('YYYY-MM-DD' ou YYYYMMDD).

Inverse de FROM_DAYS().

INT

UNIX_TIMESTAMP(date) Retourne le nombre de secondes depuis le 1/1/1970 jusqu’à la date (heure) passée en paramètre (ou entier au format YYMMDD YYYYMMDD). Inverse de FROM_UNIX-TIME().

INT

UTC_DATE(), UTC_TIME(), UTC_TIMES-TAMP()

Retournent respectivement la date, l’heure et l’estampille au méridien de Greenwich.

DATE, TIME, DATETIME WEEKDAY(date) Numéro du jour (0 : lundi, 1 : mardi, ... 6 :

dimanche) d’une date (heure).

INT WEEKOFYEAR(date) Numéro de la semaine en cours (1 à 53). INT

Tableau 4-17 Fonctions pour les dates (suite)

Fonction Objectif Retour

Tableau 4-18 Paramètres d’intervalles pour les fonctions DATE_ADD et DATE_SUB

Paramètre type Paramètre expr

MICROSECOND n

SECOND n

MINUTE n

HOUR nn

DAY nn

WEEK n

MONTH nn

YEAR nnnn

SECOND_MICROSECOND 'ss.microsec' MINUTE_MICROSECOND 'mi.microsec' MINUTE_SECOND 'mi:ssS' HOUR_MICROSECOND 'hh.microsec'

HOUR_SECOND 'hh:mi:ss'

HOUR_MINUTE 'hh:mi'

DAY_MICROSECOND 'dd.microsec'

DAY_SECOND 'dd hh:mi:ss'

DAY_MINUTE 'dd hh:mi'

DAY_HOUR 'dd hh'

YEAR_MONTH 'yyyy-mm'

Tableau 4-19 Principaux formats pour les fonctions DATE_FORMAT et STR_TO_DATE Format Description

%a Nom du jour en anglais abrévié (Sun..Sat)

%b Nom du mois en anglais abrévié (Jan..Dec)

%c Mois (0..12)

%e Jour du mois (0..31)

%f Microsecondes (000000..999999)

%H Heures (00..23)

%i Minutes (00..59)

%j Jour de l’année (001..366)

%M Nom du mois en anglais (January..December)

%s Secondes (00..59)

%T Time sur 24 heures (hh:mm:ss)

%u Numéro de semaine (00..53)

%W Nom du jour en anglais (Sunday..Saturday)

%w Jour de la semaine (0=Sunday..6=Saturday)

%Y Année sur 4 positions

Quelques exemples d’utilisation (date du jour : mercredi 9 novembre 2005) sont donnés dans le tableau suivant :

Conversions

MySQL autorise des conversions de types implicites ou explicites.

Implicites

Il est possible d’affecter, dans une expression ou dans une instruction SQL (INSERT, UPDATE...), une donnée de type numérique (ou date-heure) à une donnée de type VARCHAR (ou CHAR). Il en va de même pour l’affectation d’une colonne VARCHAR par une donnée de type date-heure (ou numérique). On parle ainsi de conversions implicites.

Tableau 4-20 Exemples de fonctions pour les dates

Besoin et fonction Résultat

1 jour et 1 microseconde après le 9/11/2005, 11 heures, 1 microseconde.

Rendez-vous dans 7 jours, 1 heure et 30 minutes.

SELECT

| Wednesday 09 November 2005 | +---+

Extraction au format numérique du jour, heures et minutes.

SELECT

Pour preuve, le script suivant ne renvoie aucune erreur :

CREATE TABLE Test (c1 DECIMAL(6,3), c2 DATE ,c3 VARCHAR(1), c4 CHAR);

INSERT INTO Test VALUES ('548.45', '20060116', 3, 5);

Explicites

Une conversion est dite « explicite » quand on utilise une fonction à cet effet. Les fonctions de conversion les plus connues sont CAST et CONVERT (qui respectent la syntaxe de la norme SQL).

Les fonctions de conversion sont décrites dans le tableau suivant :

Comparaisons

MySQL compare deux variables entre elles en suivant les règles suivantes :

Si l’une des deux valeurs est NULL, la comparaison retourne NULL (sauf pour l’opérateur

<=> qui renvoie vrai si les deux valeurs sont NULL).

Si les deux valeurs sont des chaînes, elles sont comparées en tant que telles.

Si les deux valeurs sont des numériques, elles sont comparées en tant que telles.

Les valeurs hexadécimales sont traitées comme des chaînes de bits si elles ne sont pas comparées à des numériques.

Si l’une des valeurs est TIMESTAMP ou DATETIME et si l’autre est une constante, cette der-nière est convertie en TIMESTAMP.

Dans les autres cas, les valeurs sont comparées comme des numériques (flottants).

Tableau 4-21 Fonctions de conversion

Fonction Conversion Exemple

BINARY(expr) L’expression en bits. Pour le premier pilote de notre dernier

exemple, le test =

renverra faux.

CAST(expression AS typeMySQL )

L’expression dans le type en para-mètre (BINARY, CHAR, DATE, DATETIME, DECIMAL, SIGNED, TIME, UNSIGNED).

retourne '2'.

CONVERT(c, jeu-car)

La chaîne c dans le jeu de

caractè-res passé en paramètre. jeu de caractère DOS, retourne

"? Ê Í ?".

BINARY(brevet) BINARY('pl-1')

CAST(2 AS CHAR)

CONVERT('Ä Ê Í Ø' USING cp850)

Énumérations

Nous avons vu au chapitre 2 comment manipuler les deux types d’énumérations que MySQL propose (ENUM et SET). Étudions à présent quelques fonctions relatives à ces types.

Type ENUM

Chaque valeur de l’énumération est associée à un indice commençant à 1. Ainsi il est possible de retrouver la position d’une valeur au sein de son énumération comme l’illustre l’exemple suivant, décrit au chapitre 2.

L’indice d’une valeur vide (colonne valuée à ('') ou '' dans l’INSERT) est 0, celui d’une valeur NULL est NULL.

Type SET

Il est possible d’extraire des enregistrements en comparant des ensembles entre eux ou en testant l’appartenance d’éléments au sein d’une énumération SET. L’exemple suivant (décrit au chapitre 2) illustre deux possibilités d’extraction.

Tableau 4-22 Exemples d’extraction d’indices d’une énumération ENUM

Table et données Extraction

Figure 4-5 Table et données colonne ENUM mysql> SELECT nom, diplome, FROM UnCursus ;

+---+---+---+

| nom | diplome | diplome+0 | +---+---+---+

| F. Brouard | BTS | 1 |

| F. Degrelle | Licence | 3 | +---+---+---+

Web

UnCursus

num nom {diplome }

E1 F. Brouard BTS

E2 F. Degrelle Licence

ENUM

BTS, DUT, Licence INSA

diplome+0

Il est possible d’écrire des extractions basées sur l’opérateur LIKE (exemple : « SELECT … FROM Cursus WHERE diplomes LIKE ('%Licence%') »). Cela n’est cependant pas recommandé, car le mot 'Licence' peut être présent dans l’ensemble non pas en tant qu’élé-ment, mais en tant que sous-chaîne d’un élément.

Dans le document CHEZ LE MÊME ÉDITEUR Du même auteur C. S (Page 122-130)

Documents relatifs