|  |  
 
Une clause selectouwheredans une command SQL peut contenir des expressions utilisant les fonctions décrites ci-dessous. 
Une expression qui contient une valeur aura toujours un résultat , sauf exceptions indiquées dans la documentation sur les opérateurs et fonctions.
 
Note: Il faut nécessairement un espace entre le nom de la fonction et la parenthèse ouvrante qui suit. Cela aide l'analyseur syntaxique de MySQL à faire la différence entre les appels de fonctions et les références aux tables ou colonnes qui interviennent dans la même colonne et qui ont le même nom que la fonction. Les espaces autours des arguments aussi autorisés.
 
Par souci de brièveté, les affichages d'exemples seront en mode réduit. Par exemple
 
mysql> select MOD(29,9);
1 rows in set (0.00 sec)
+-----------+
| mod(29,9) |
+-----------+
|         2 |
+-----------+
 
Sera affiché comme suit :
 
mysql> select MOD(29,9);
        -> 2
 
( ... )
 
 
( ... )
Parenthèses. MySQL gère les priorités avec les parenthèses.
mysql> select 1+2*3;
        -> 7
mysql> select (1+2)*3;
        -> 9
Parentheses. Use these to force the order of evaluation in an expression.
Les opérateurs arithmétiques usuels sont disponible. Il faut bien noter que dans le cas de -,+et*, le resultat est calculé avec la précisionBIGINT(64-bit) si les deux opérateurs sont des entiers. +Addition 
mysql> select 3+5;
        -> 8
-Soustraction
mysql> select 3-5;
        -> -2
*Multiplication
mysql> select 3*5;
        -> 15
mysql> select 18014398509481984*18014398509481984.0;
        -> 324518553658426726783156020576256.0
mysql> select 18014398509481984*18014398509481984;
        -> 0
Le résultat du dernier exemple est incorrect, car le résultat de la multiplication excède la taille maximale d'un /
DivisionBIGINT. 
mysql> select 3/5;
        -> 0.60
La division par zéro retourne une valeur NULL: 
mysql> select 102/(1-1);
        -> NULL
La division sera calculée avec l'arithmétique des BIGINT, uniquement dans le cas ou le résultat doit être converti en entier ! 
 
MySQL utilise des BIGINT(64-bit) pour ses opérations sur les bits, donc tous les opérateurs suivants ont au portent au plus 64 bits. |OU bit à bit
mysql> select 29 | 15;
        -> 31
&ET bit à bit
mysql> select 29 & 15;
        -> 13
<<Décalage des bits vers la gauche sur unBIGINT.
mysql> select 1 << 2
        -> 4
>>Décalage des bits vers la droite sur unBIGINT.
mysql> select 4 >> 2
        -> 1
BIT_COUNT(N)Compte le nombre de bits mis à un dans l'argument N.
mysql> select BIT_COUNT(29);
        -> 4
 
Toutes les opérations logiques retournent 1(TRUE) ou0(FALSE). NOT!NON logique. Retourne 1 si l'argument est0, sinon, retourne0. Exception:NOT NULLretourneNULL.
mysql> select NOT 1;
        -> 0
mysql> select NOT NULL;
        -> NULL
mysql> select ! (1+1);
        -> 0
mysql> select ! 1+1;
        -> 1
Le dernier exemple retourne 1 car l'expression est évaluée de la même façon que (!1)+1. OR||OU logique. Retourne1si l'un des arguments est ni0niNULL.
mysql> select 1 || 0;
        -> 1
mysql> select 0 || 0;
        -> 0
mysql> select 1 || NULL;
        -> 1
AND&&ET logique. Retourne0 si l'un des arguments est0ouNULL. Sinon, retourne 1.
mysql> select 1 && NULL;
        -> 0
mysql> select 1 && 0;
        -> 0
 
Les opérations de comparaison retourne soit 1(TRUE),0(FALSE) ouNULL. Ces fonctions s'appliquent aussi bien aux nombres qu'aux chaînes. Les chaînes sont automatiquement converties en nombre et les nombres en chaîne, suivant les besoins (comme en Perl). 
MySQL effectue les comparaisons en suivant les règle suivantes
 
Si l'un au moins des argument est NULL, le résultat de la comparaison estNULL.Si les deux argument sont des chaînes, ils se comparent en tant que chaînes.
Si les deux argument sont des entiers, ils se comparent en tant que entiers.
Si les deux argument est de type TIMESTAMPouDATETIME, et l'autre argument est une constante, la constante est convertie au formatTIMESTAMPavant la comparaison. Cette fonction est faite pour assurer la compatibilité ODBC.Dans tous les autres cas, les arguments sont comparés en tant que nombre à virgule flottante.
 
Par défaut, les comparaisons de chaîne sont fait sans tenir compte de la casse, et en utilisant le jeu de caractère courant (ISO-8859-1 Latin1 par défaut, qui fonctionne bien pour l'anglais).
Les exemples suivants illustrent les règles de conversions lors des opérations de comparaison.
 
mysql> SELECT 1 > '6x';
         -> 0
mysql> SELECT 7 > '6x';
         -> 1
mysql> SELECT 0 > 'x6';
         -> 0
mysql> SELECT 0 = 'x6';
         -> 1
=Egalité.
mysql> select 1 = 0;
        -> 0
mysql> select '0' = 0;
        -> 1
mysql> select '0.0' = 0;
        -> 1
mysql> select '0.01' = 0;
        -> 0
mysql> select '.01' = 0.01;
        -> 1
<>!=Différent
mysql> select '.01' <> '0.01';
        -> 1
mysql> select .01 <> '0.01';
        -> 0
mysql> select 'zorro' <> 'zorrro';
        -> 1
<=Inférieur ou égal
mysql> select 0.1 <= 2;
        -> 1
<Strictement inférieur
mysql> select 2 <= 2;
        -> 1
>=Supérieur ou égal
mysql> select 2 >= 2;
        -> 1
>Strictement supérieur
mysql> select 2 > 2;
        -> 0
<=>Egalité : ce opérateur s'assure qu'on ne compare pas NULL et une valeur non nulle.
mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
        -> 1 1 0
expression BETWEEN minimum AND maximumSi l'expression est comprise entre leminimum et lemaximum, alorsBETWEENretourne1, sinon0. Cette fonction est équivalente à l'expression(minimum <= expression AND expression <= maximum)si tous les arguments sont du même type. Le premier argument (expression) détermine la manière dont la comparaison va être faite. Siexpression est une chaîne, la comparaison sera de type chaîne, et insensible à la casse. Siexpression est une chaîne de type binaire, la comparaison sera de type chaîne, et sensible à la casse. Siexpression est un entier, la comparaison sera de type numérique. Siexpression est un nombre à virgule flottante, la comparaison sera de type numérique, à virgule flottante.
mysql> select 1 BETWEEN 2 AND 3;
        -> 0
mysql> select 'b' BETWEEN 'a' AND 'c';
        -> 1
mysql> select 2 BETWEEN 2 AND '3';
        -> 1
mysql> select 2 BETWEEN 2 AND 'x-3';
        -> 0
expression IN (value,...)Retourne1siexpression est un membre de la listeIN, sinon retourne0.Si toutes les valeurs de la liste INsont constantes, alors elles sont toutes converties au type deexpression, et triées. La recherche dans la listes est alors faite avec une recherche binaire. Cela signifie que la recherche est très rapide si la listeINne contient que des constantes. Siexpressionest une chaîne sensible à la casse, la comparaison avec les valeurs deIN en tiendra compte.
mysql> select 2 IN (0,3,5,'wefwf');
        -> 0
mysql> select 'wefwf' IN (0,3,5,'wefwf');
        -> 1
expression NOT IN (value,...)Identique àNOT (expression IN (value,...)).ISNULL(expression )Siexpression estNULL,ISNULL()retourne1, sinon0.
mysql> select ISNULL(1+1);
        -> 0
mysql> select ISNULL(1/0);
        -> 1
Il faut noter que la comparaison à NULLavec=sera toujours fausse! COALESCE(liste)Retourne le premier élément nonNULLdans la liste.
mysql> select COALESCE(NULL,1);
        -> 1
mysql> select ISNULL(NULL,NULL,NULL);
        -> NULL
INTERVAL(N,N1,N2,N3,...)Retourne1siN1<N2<N3<...<Nn. Si il existe deux valeurs i et j, telles que i < j et Ni > Nj, alors la fonction retourne faux. Toutes les valeurs sont traitées comme des nombres. Cela permet l'utilisation d'une comparaison binaire, très rapide.
mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
        -> 3
mysql> select INTERVAL(10, 1, 10, 100, 1000);
        -> 2
mysql> select INTERVAL(22, 23, 30, 44, 200);
        -> 0
 
Dans une expression quelconque, si une des chaînes est sensible à la casse, alors la comparaison tiendra compte de la casse.
 expr1 LIKE expr2 [ESCAPE 'escape-char']Expression régulière SQL. Retourne1(TRUE) ou0(FALSE). AvecLIKE, les caractères spéciaux suivants sont disponibles :
mysql> select 'David!' LIKE 'David_';
        -> 1
mysql> select 'David!' LIKE '%D%v%';
        -> 1
Pour tester la présence d'un des caractères spéciaux, il suffit de faire précéder du caractère d'échappement. Si ce dernier n'est pas précisé, le caractère ``\'' est alors utilisé.
 
mysql> select 'David!' LIKE 'David\_';
        -> 0
mysql> select 'David_' LIKE 'David\_';
        -> 1
Pour spécifier un autre caractère d'échappement, il faut utiliser la clause ESCAPE: 
mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
       -> 1
LIKEpeut travailler avec des expressions numériques (c'est une extension de la norme ANSI SQL.) 
mysql> select 10 LIKE '1%';
        -> 1
Note: Comme MySQL utilise le système d'échappement du langage C (e.g., ``\n''), il faut doubler toutes les occurrences dans les clause LIKE. Par exemple, pour rechercher le caractère ``\n'', il faut mettre la chaîne ``\\n''. Pour recherche le caractère for ``\'', il faut l'écrire ``\\\\'' (les backslashes sont supprimés une première fois par l'analyseur syntaxique, et une deuxième fois, quand la recherche est terminée : ce qui laisse un seul backslash à rechercher). expr1 NOT LIKE expr2 [ESCAPE 'escape-char']Identique àNOT (expr1 LIKE expr2 [ESCAPE 'escape-char']). 
expr REGEXP pat
expr RLIKE patexpression REGEXP patexpression RLIKE patEffectue une chercher sur la chaîneexpression avec le masquepat. Le pattern peut être une expression régulière étendue. Retoune1si l'expression régulière réussit,0.RLIKEest un synonyme pourREGEXP, fourni pour assurer la compatibilité avec mSQL Note: Comme MySQL utilise le système d'échappement du langage C (e.g., ``\n''), il faut doubler toutes les occurrences dans les clause.REGEXP.
mysql> select 'Monty!' REGEXP 'm%y%%';
        -> 0
mysql> select 'Monty!' REGEXP '.*';
        -> 1
mysql> select 'new*\n*line' REGEXP 'new\\*.\\*line';
        -> 1
REGEXPetRLIKEutilisent le jeu de caractère (ISO-8859-1 Latin1 par défaut) pour choisir le type de caractère. 
expr NOT REGEXP pat
expr NOT RLIKE pat expression NOT REGEXP expressionIdentique àNOT (expression REGEXP expression ).STRCMP(expr1,expr2)STRCMP()retourne0si les chaînes sont identiques,-1si le premier argument est plus petit que le second, en fonction de l'ordre de tri courant, et sinon1.
mysql> select STRCMP('text', 'text2');
        -> -1
mysql> select STRCMP('text2', 'text');
        -> 1
mysql> select STRCMP('text', 'text');
        -> 0
 BINARYL'opérateurBINARYtransforme la chaîne qui le suive en chaîne insensible à la casse. C'est un moyen simple de forcer une comparaison insensible à la casse, même si la colonne n'a pas été définie comme unBINARYouBLOB.
mysql> select "a" = "A";
        -> 1
mysql> select BINARY "a" = "A";
        -> 0
BINARYa été introduit dans MySQL 3.23.0 
 IFNULL(expr1,expr2)Siexpr1n'est pasNULL,IFNULL()retourneexpr1, sinonexpr2.IFNULL()retourne un nombre ou une chaîne, en fonction du contexte dans lequel il est utilisé.
mysql> select IFNULL(1,0);
        -> 1
mysql> select IFNULL(0,10);
        -> 0
mysql> select IFNULL(1/0,10);
        -> 10
mysql> select IFNULL(1/0,'yes');
        -> 'yes'
IF(expr1,expr2,expr3)Siexpr1est vraie (TRUE) (expr1 <> 0 etexpr1 <> NULL) alorsIF()retourneexpr2, sinon il retourneexpr3.IF()retourne un nombre ou une chaîne, en fonction du contexte dans lequel il est utilisé.
mysql> select IF(1>2,2,3);
        -> 3
mysql> select IF(1<2,'yes','no');
        -> 'yes'
mysql> select IF(strcmp('test','test1'),'yes','no');
        -> 'no'
expr1est évaluée en tant qu'entier, ce qui signifie que si le test portait sur un nombre à virgule flottante ou une chaîne, il faudrait mieux utiliser un opérateur de comparaison. 
mysql> select IF(0.1,1,0);
        -> 0
mysql> select IF(0.1<>0,1,0);
        -> 1
Dans le premier cas ci-dessus, IF(0.1)retourne0car0.1est converti en un nombre entier, ce qui conduit à un test de typeIF(0). C'est une source d'erreur. Dans le deuxième cas, la comparaison est faite avec un opérateur de comparaison, qui teste la non nullité. Le résultat de la comparaison est utilisé comme un entier. 
 
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
La première version retourne resultsivalue=compare-value. 
La seconde version retourne le résultat si la première condition est vraie. Si il n'y a aucun résultat, alors, le résultat aprèsELSEest retourné. SI il n'y a pas de résultat pourELSEalorsNULL.
mysql> SELECT CASE 1 WHEN 1 THEN "un" WHEN 2 THEN "deux" ELSE "plus" END;
       -> "un"
mysql> SELECT CASE WHEN 1>0 THEN "vrai" ELSE "faux" END;
       -> "vrai"
mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
       -> NULL
 
Toutes les fonctions mathématiques retourne NULLen cas d'erreur. -Moins unaire. Change le signe de l'argument.
mysql> select - 2;
        -> -2
Note : si cet opérateur est utilisé avec un BIGINT, le résultat seraBIGINT! Cela signifie qu'il faut éviter d'utilisersur des entiers qui ont la valeur-2^63! ABS(X)Valeur absolue deX.
mysql> select ABS(2);
        -> 2
mysql> select ABS(-32);
        -> 32
Cette fonction ne pose aucun problème particulier avec les valeurs de type BIGINT. SIGN(X)Retourne le signe de l'argument sous la forme-1,0or1, suivant queXest négatif, nul, ou positif.
mysql> select SIGN(-32);
        -> -1
mysql> select SIGN(0);
        -> 0
mysql> select SIGN(234);
        -> 1
MOD(N,M)%Modulo (identique à l'opérateur%en langage C). Retourne le reste de la division euclidienne deNparM.
mysql> select MOD(234, 10);
        -> 4
mysql> select 253 % 7;
        -> 1
mysql> select MOD(29,9);
        -> 2
Cette fonction ne pose aucun problème particulier avec les valeurs de type BIGINT. FLOOR(X)Retourne le plus grand entier possible mais plus petit queX.
mysql> select FLOOR(1.23);
        -> 1
mysql> select FLOOR(-1.23);
        -> -2
Note : le résultat est converti en BIGINT! CEILING(X)Retourne le plus petit entier possible mais plus grand queX.
mysql> select CEILING(1.23);
        -> 2
mysql> select CEILING(-1.23);
        -> -1
Note : le résultat est converti en BIGINT! ROUND(X)Retourne l'argumentX, arrondi à l'entier le plus proche.
mysql> select ROUND(-1.23);
        -> -1
mysql> select ROUND(-1.58);
        -> -2
mysql> select ROUND(1.58);
        -> 2
Note : le résultat est converti en BIGINT! ROUND(X,D)Retourne l'argumentX, arrondi au décimal le plus proche, avecDdécimales. SiD=0, le résultat n'aura pas de partie décimale.
mysql> select ROUND(1.298, 1);
        -> 1.3
mysql> select ROUND(1.298, 0);
        -> 1
Note : le résultat est converti en BIGINT!
 EXP(X)Retourne la valeur dee(base des logarithmes naturels ou népériens) à la puissanceX.
mysql> select EXP(2);
        -> 7.389056
mysql> select EXP(-2);
        -> 0.135335
LOG(X)Retourne le logarithme naturel deX.
mysql> select LOG(2);
        -> 0.693147
mysql> select LOG(-2);
        -> NULL
Pour obtenir la valeur du logarithme de Xdans une base arbitraire, il faut utiliser la formuleLOG(X)/LOG(B). LOG10(X)Retourne le logarithme deXen base 10.
mysql> select LOG10(2);
        -> 0.301030
mysql> select LOG10(100);
        -> 2.000000
mysql> select LOG10(-100);
        -> NULL
POW(X,Y)POWER(X,Y)Retourne la valeur deXà la puissanceY.
mysql> select POW(2,2);
        -> 4.000000
mysql> select POW(2,-2);
        -> 0.250000
SQRT(X)Retourne la racine carrée positive deX.
mysql> select SQRT(4);
        -> 2.000000
mysql> select SQRT(20);
        -> 4.472136
PI()Retourne la valeur de PI.
mysql> select PI();
        -> 3.141593
COS(X)Retourne le cosinus deX, avecXen radians.
mysql> select COS(PI());
        -> -1.000000
SIN(X)Retourne le sinus deX, avecXen radians.
mysql> select SIN(PI());
        -> 0.000000
TAN(X)Retourne la tangente deX, avecXen radians.
mysql> select TAN(PI()+1);
        -> 1.557408
ACOS(X)Retourne l'arcosinus deX, c'est à dire l'angle dont le cosinus estXen radians. RetourneNULLsiXn'est pas compris entre-1et1.
mysql> select ACOS(1);
        -> 0.000000
mysql> select ACOS(1.0001);
        -> NULL
mysql> select ACOS(0);
        -> 1.570796
ASIN(X)Retourne l'arsinus deX, c'est à dire l'angle dont le sinus estXen radians. RetourneNULLsiXn'est pas compris entre-1et1.
mysql> select ASIN(0.2);
        -> 0.201358
mysql> select ASIN('foo');
        -> 0.000000
ATAN(X)Retourne l'arctangente deX, c'est à dire l'angle dont la tangente estXen radians.
mysql> select ATAN(2);
        -> 1.107149
mysql> select ATAN(-2);
        -> -1.107149
ATAN2(X,Y)Retourne l'arc tangente de deux variablesXetY. C'est le même calcul que arc tangent ofY / X, hormis le fait que les signes des deux arguments est utilisé pour déterminer le quadrant du résultat.
mysql> select ATAN(-2,2);
        -> -0.785398
mysql> select ATAN(PI(),0);
        -> 1.570796
COT(X)Retourne la cotangente deX.
mysql> select COT(12);
        -> -1.57267341
mysql> select COT(0);
        -> NULL
RAND()RAND(N)Retourne un nombre aléatoire, compris entre0et1.0. Si un entierNest précisé, il est utilisé comme valeur de seed.
mysql> select RAND();
        -> 0.5925
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND();
        -> 0.2079
mysql> select RAND();
        -> 0.7888
Il est impossible d'utiliser une colonne de valeur RAND()avec la clauseORDER BY, car la colonne sera évalué plusieurs fois. Avec MySQL 3.23, il est cependant possible d'écrire:SELECT * FROM Nom_table ORDER BY RAND(). Comme cela, il est possible de faire une sélection aléatoire d'une table :SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000. LEAST(X,Y,...)Au moins deux arguments, retourne la plus petite valeur (minimum). Les arguments sont comparés en utilisant les règles suivantes :
Si LEASTest utilisé dans un contexte d'entiers, ou bien tous les arguments sont des entiers, les arguments sont évalués et comparés en tant qu'entiers.
Si LEASTest utilisé dans un contexte de nombre à virgule flottante, les arguments sont évalués et comparés en tant que nombre à virgule flottante.
Si tous les arguments sont des chaînes sensibles à la casse, tous les arguments sont comparés comme des chaînes insensibles à la casse.
Dans tous les autres cas, les arguments sont comparés comme des chaînes insensibles à la casse.
 
mysql> select LEAST(2,0);
        -> 0
mysql> select LEAST(34.0,3.0,5.0,767.0);
        -> 3.0
mysql> select LEAST("B","A","C");
        -> "A"
Avec les version de MySQL antérieur à la 3.22.5, il est possible d'utiliser MIN()à la place deLEAST. GREATEST(X,Y,...)Retourne le plus grand argument de la liste. Les arguments sont comparés de la même manière que pourLEAST.
mysql> select GREATEST(2,0);
        -> 2
mysql> select GREATEST(34.0,3.0,5.0,767.0);
        -> 767.0
mysql> select GREATEST("B","A","C");
        -> "C"
Avec les version de MySQL antérieur à la 3.22.5, il est possible d'utiliser MAX ()à la place deGREATEST. DEGREES(X)Retourne l'argumentX, converti de radians en degrés.
mysql> select DEGREES(PI());
        -> 180.000000
RADIANS(X)Retourne l'argumentX, converti de radians degrés en radians.
mysql> select RADIANS(90);
        -> 1.570796
TRUNCATE(X,D)Retourne l'argumentX, tronqué àDdécimales.
mysql> select TRUNCATE(1.223,1);
        -> 1.2
mysql> select TRUNCATE(1.999,1);
        -> 1.9
mysql> select TRUNCATE(1.999,0);
        -> 1
 
Les fonctions qui retourne des chaînes, retourneront NULLsi le résultat dépasse la taille maximale demax_allowed_packet. 
Pour les opérations sur les chaînes, le premier caractère est en position 1.
 ASCII(str)Retourne le code ASCII du premier caractère de la chaîne. Si la chaîne est vide, retourne0. Si la chaîne estNULL, retourneNULL.
mysql> select ASCII('2');
        -> 50
mysql> select ASCII(2);
        -> 50
mysql> select ASCII('dx');
        -> 100
CONV(N,from_base,to_base)Converti des nombres d'une base à l'autre, et retourne la chaîne représentant le résultat converti. Si la chaîne estNULL, retourneNULL. L'argumentNest considéré comme un entier, mais peut être un entier ou une chaîne. La base minimum est 2, et maximum est 36. Si la base d'arrivée est un nombre négatif,Nest considéré comme un entier signé. Sinon,Nest traité comme un entiers non signé.CONVfonctionne à la précision 64 bits.
mysql> select CONV("a",16,2);
        -> '1010'
mysql> select CONV("6E",18,8);
        -> '172'
mysql> select CONV(-17,10,-18);
        -> '-H'
mysql> select CONV(10+"10"+'10'+0xa,10,10);
        -> '40'
BIN(N)Retourne une chaîne représentant l'argumentNen binaire.Nest unBIGINT. Cette fonction est l'équivalent deCONV(N,10,2). RetourneNULLsiNestNULL.
mysql> select BIN(12);
        -> '1100'
OCT(N)Retourne une chaîne représentant l'argumentNen base 8.Nest unBIGINT. Cette fonction est l'équivalent deCONV(N,10,8). RetourneNULLsiNestNULL.
mysql> select OCT(12);
        -> '14'
HEX(N)Retourne une chaîne représentant l'argumentNen hexadécimal.Nest unBIGINT. Cette fonction est l'équivalent deCONV(N,10,16). RetourneNULLsiNestNULL.
mysql> select HEX(255);
        -> 'FF'
CHAR(N,...)Interprète les arguments comme des nombres entiers, et retourne une chaîne constituée des caractères correspondant aux codes ASCII des arguments. Les valeursNULLsont ignorées.
mysql> select CHAR(77,121,83,81,'76');
        -> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
        -> 'MMM'
CONCAT(X,Y,...)Concatène les arguments, et re tourne le résultat. RetourneNULLsi un des arguments estNULL. Le nombre d'argument minimum est 2.
mysql> select CONCAT('My', 'S', 'QL');
        -> 'MySQL'
mysql> select CONCAT('My', NULL, 'QL');
        -> NULL
LONGUEUR(str)OCTET_LONGUEUR(str)CHAR_LONGUEUR(str)CHARACTER_LONGUEUR(str)Retourne la longueur de la chaînestr.
mysql> select LONGUEUR('text');
        -> 4
mysql> select OCTET_LONGUEUR('text');
        -> 4
LOCATE(substr,str)POSITION(substr IN str)Retourne la position de la première occurrence desubstrdans la chaîne. Retourne0 sisubstrn'est pas trouvée.
mysql> select LOCATE('bar', 'foobarbar');
        -> 4
mysql> select LOCATE('xbar', 'foobar');
        -> 0
LOCATE(substr,str,pos)Retourne la position de la première occurrence desubstrdans la chaîne, en commencant à chercher à partir de la positionpos. Retourne0 sisubstrn'est pas trouvée.
mysql> select LOCATE('bar', 'foobarbar',5);
        -> 7
INSTR(str,substr)Retourne la position de la première occurrence desubstrdans la chaîne, en commencant à chercher à partir de la positionpos. Retourne0 sisubstrn'est pas trouvée. C'est la même fonction queLOCATE(), mais les deux arguments n'ont pas la même place.
mysql> select INSTR('foobarbar', 'bar');
        -> 4
mysql> select INSTR('xbar', 'foobar');
        -> 0
LPAD(str,len,padstr)Retourne la chaînestr, complétée à gauche par la chaîne padstrjusqu'à ce que le résultat ait la longueur .
mysql> select LPAD('hi',4,'??');
        -> '??hi'
RPAD(str,len,padstr)Retourne la chaînestr, complétée à droite par la chaîne padstrjusqu'à ce que le résultat ait la longueur .
mysql> select RPAD('hi',5,'?');
        -> 'hi???'
LEFT(str,len)Retourne leslenpremiers caractères de la chaînestr.
mysql> select LEFT('foobarbar', 5);
        -> 'fooba'
RIGHT(str,len)SUBSTRING(str FROM len)Retourne leslenderniers caractères de la chaînestr.
mysql> select RIGHT('foobarbar', 4);
        -> 'rbar'
mysql> select SUBSTRING('foobarbar' FROM 4);
        -> 'rbar'
SUBSTRING(str,pos,len)SUBSTRING(str FROM pos FOR len)MID(str,pos,len)Retourne leslencaractères de la chaînestr, en commencant à partir de la position pos. La varianteFROMest une syntaxe issue de la norme ANSI SQL92.
mysql> select SUBSTRING('Quadratically',5,6);
        -> 'ratica'
SUBSTRING(str,pos)Retourne une sous-chaîne, issue destret commencant à la positionpos.
mysql> select SUBSTRING('Quadratically',5);
        -> 'ratically'
SUBSTRING_INDEX(str,delim,count)Retourne une sous-chaîne, issue destr, aprèscountoccurrences du délimiteur delim. Sicountest positif, la sous-chaîne comprendra tous les caractères situés à gauche du délimiteur final. Sicountest négatif, la sous-chaîne comprendra tous les caractères situés à droite du délimiteur final
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'
LTRIM(str)Retourne la chaînestraprès élimination des espaces situés en début de chaîne.
mysql> select LTRIM('  barbar');
        -> 'barbar'
RTRIM(str)retourne la chaînestraprès élimination des espaces situés en fin de chaîne.
mysql> select RTRIM('barbar   ');
        -> 'barbar'
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)Retourne la chaînestraprès élimination de chaînesremstrsituées en début et/ou fin de chaîne. Si aucune des optionsBOTH,LEADINGouTRAILINGn'est précisé, alorsBOTHest utilisé par défaut. Siremstrn'est pas précisé, les espaces sont éliminés.
mysql> select TRIM('  bar   ');
        -> 'bar'
mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
        -> 'barxxx'
mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
        -> 'bar'
mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
        -> 'barx'
SOUNDEX(str)Retourne une représentation phonétique de la chaîne . Deux chaînes qui " sonne de la même façon " devraient avoir des représentation identiques. Une représentation standard a 4 caractères, maisSOUNDEX()retourne un nombre arbitraire de caractère. Il faudra alors utiliserSUBSTRING()sur le résultat pour avoir une représentation standard. Les caractères non-alphanumériques sont ignorés. Tous les caractères alphabétiques hors de l'intervalle A-Z sont considéré comme des voyelles.
Attention : cette fonction ayant été programmé par des anglophones, la " sonorité " d'une chaîne aura un fort accent anglais.
mysql> select SOUNDEX('Hello');
        -> 'H400'
mysql> select SOUNDEX('Quadratically');
        -> 'Q36324'
SPACE(N)Crée une chaîne contenantNespaces.
mysql> select SPACE(6);
        -> '      '
REPLACE(str,from_str,to_str)Remplace les occurrences defrom_strpar la chaîneto_str, dans la chaîne str.
mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwww.mysql.com'
REPEAT(str,count)Retourne une chaîne constituée des répétitions de la chaîne . Sicount <= 0, retourne une chaîne vide. SistroucountestNULL, retourneNULL.
mysql> select REPEAT('MySQL', 3);
        -> 'MySQLMySQLMySQL'
REVERSE(str)Inverse l'ordre des caractères de la chaînestr.
mysql> select REVERSE('abc');
        -> 'cba'
INSERT(str,pos,len,newstr)Retourne la chaîne str, avec la chaînenewstrqui remplace tous les caractères à partir de la position pos, et sur la longueur len.
mysql> select INSERT('Quadratic', 3, 4, 'What');
        -> 'QuWhattic'
ELT(N,str1,str2,str3,...)Retournestr1siN=1,str2siN=2, etc... RetourneNULLsi est plus petit que1ou plus grand que le nombre d'arguments.ELT()est le contraire deFIELD().
mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'
FIELD(str,str1,str2,str3,...)Retourne l'index de la chaînestrdans la liste des arguments . Retourne0 sistrn'est pas trouvé .FIELD()est le contraire deELT()
mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 2
mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
        -> 0
FIND_IN_SET(str,strlist)Retourne l'index de la chaîne dans la liste. Une liste de chaîne est composée de chaînes, séparées par le caractère ``,''. Si le premier argument est une chaîne constante, et le deuxième est une colonne de typeSET, la fonction est optimiséeFIND_IN_SET()pour utiliser l'arithmétique sur les bits ! Retournestrsi n'est pas dans la liste strlist, ou si la liste est vide. RetourneNULLsi l'un des arguments estNULL. La fonction n'accepte pas de caractère ``,''dans le premier membre de la liste.
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
        -> 2
MAKE_SET(bits,str1,str2,...)Retourne un ensemble (une chaîne contenant des sous-chaînes séparée par ``,'') qui correspond à u sous-ensemble des chaînes en arguments. La chaîne à l'index i sera présente dans l'ensemble résultat, si le bit à l'index i est à un, dansbits).
mysql> SELECT MAKE_SET(1,'a','b','c');
        -> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
        -> 'hello,world'
mysql> SELECT MAKE_SET(0,'a','b','c');
        -> ''
EXPORT_SET(bits,on,off,[separator],[number_of_bits])Retourne une chaîne dans laquelle, pour chaque bit à 1 , il y a la chaîneon, pour chaque bit à 0 , il y a la chaîneoff, séparés par leseparator(par défaut, ','), et uniquement pour lesnumber_of_bits(par défaut, 64) premiers bits.
mysql> select EXPORT_SET(5,'Y','N',',',4)
        -> Y,N,Y,N 
LCASE(str)LOWER(str)Retourne la chaîne avec tous les caractères en minuscules, conformément au jeu de caractère courant (par défaut, ISO-8859-1 Latin1).
mysql> select LCASE('QUADRATICALLY');
        -> 'quadratically'
UCASE(str)UPPER(str)Retourne la chaîne avec tous les caractères en majuscule, conformément au jeu de caractère courant (par défaut, ISO-8859-1 Latin1).
mysql> select UCASE('Hej');
        -> 'HEJ'
LOAD_FILE(Nom_fichier)Lit le fichierNom_fichieret retourne le résultat dans une chaîne. Le fichier doit être sur le serveur, et il faut préciser le nom et le chemin d'accès complet. Le fichier doit être lisible par tous, et être plus petit quemax_allowed_packet. Si le fichier n'existe pas, ou ne peut être lu, la fonction retourneNULL.
mysql> UPDATE Nom_tableSET blob_column=LOAD_FILE("/tmp/picture") WHERE id=1;
Il n'y a pas de fonction de conversion d'un nombre en char. Il n'y en pas besoin, car MySQL converti automatiquement les nombres en chaînes, et vice versa.
 
mysql> SELECT 1+"1";
        -> 2
mysql> SELECT CONCAT(2,' test');
        -> '2 test'
Si une fonction qui travaille sur des chaînes sensibles à la casse recoit comme argument une chaîne insensible à la casse, le resultat sera aussi une chaîne insensible à la casse. Un nombre converti en chaîne est traité comme une chaîne insensible à la casse. Cela n'affecte que les comparaisons.
 
 
  7.2.6  Types date et heure pour une description précise des intervalles de validité de chaque type.
 
Voici un exemple qui utilise des fonctions sur les dates et heures. La requête ci-dessous sélectionne toutes les lignes avec une valeur qui est date_coldans les 30 derniers jours : 
mysql> SELECT quelquechose FROM table
           WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
DAYOFWEEK(date)Retourne le jour de la semaine sous la forme d'un index qui commence à 1 (1= Dimanche,2= Lundi, ...7= Samedi). Ces valeurs sont celles du standard ODBC.
mysql> select DAYOFWEEK('1998-02-03');
        -> 3
WEEKDAY(date)Retourne le jour de la semaine sous la forme d'un index qui commence à 0 (0= Dimanche,1= Lundi, ...6= Samedi).
mysql> select WEEKDAY('1997-10-04 22:23:00');
        -> 5
mysql> select WEEKDAY('1997-11-05');
        -> 2
DAYOFMONTH(date)Retourne le jour du mois sous la forme d'un index entre1et31.
mysql> select DAYOFMONTH('1998-02-03');
        -> 3
DAYOFYEAR(date)Retourne le jour de l'année sous la forme d'un index entre1et366.
mysql> select DAYOFYEAR('1998-02-03');
        -> 34
MONTH(date)Retourne le mois de ladatesous la forme d'un index entre1et12.
mysql> select MONTH('1998-02-03');
        -> 2
DAYNAME(date)Retourne le nom du jour de ladatesous la forme d'une chaîne (en anglais ).
mysql> select DAYNAME("1998-02-05");
        -> 'Thursday'
MONTHNAME(date)Retourne le nom du mois de ladatesous la forme d'une chaîne (en anglais ).
mysql> select MONTHNAME("1998-02-05");
        -> 'February'
QUARTER(date)Retourne le trimestre de ladatesous la forme d'un index entre1et4.
mysql> select QUARTER('98-04-01');
        -> 2
WEEK(date)WEEK(date,first)Avec un seul argument, retourne la semaine de ladatesous la forme d'un index entre1à52, avec Dimanche comme premier jour de la semaine. La fonction avec deux arguments permet de préciser si la semaine commence à Dimanche (0) ou Lundi (1).
mysql> select WEEK('1998-02-20');
        -> 7
mysql> select WEEK('1998-02-20',0);
        -> 7
mysql> select WEEK('1998-02-20',1);
        -> 8
YEAR(date)Retourne l'année de ladatesous la forme d'un index entre1000et9999.
mysql> select YEAR('98-02-03');
        -> 1998
HOUR(time)Retourne l'heure de ladatesous la forme d'un index entre0et23.
mysql> select HOUR('10:05:03');
        -> 10
MINUTE(time)Retourne la minute de ladatesous la forme d'un index entre0et59.
mysql> select MINUTE('98-02-03 10:05:03');
        -> 5
SECOND(time)Retourne la seconde de ladatesous la forme d'un index entre0et59.
mysql> select SECOND('10:05:03');
        -> 3
PERIOD_ADD(P,N)AjouteNmois à la dateP(au formatYYMMouYYYYMM). Retourne le résultat au formatYYYYMM. Il faut bien noter que la datePn'est pas au formatdate.
mysql> select PERIOD_ADD(9801,2);
        -> 199803
PERIOD_DIFF(P1,P2)Retourne le nombre de mois entre deux dates P1etP2.P1etP2 doivent être au format . Il faut bien noter que les datesP1etP2ne sont pas au formatdate.
mysql> select PERIOD_DIFF(9802,199703);
        -> 11
 DATE_ADD(date,INTERVAL expression type)DATE_SUB(date,INTERVAL expression type)ADDDATE(date,INTERVAL expression type)SUBDATE(date,INTERVAL expression type)Ces fonctions effectuent des opérations arithmétiques sur les dates. Elles ont été inserées dans MySQL 3.22.ADDDATE()etSUBDATE()sont synonymes deDATE_ADD()etDATE_SUB().dateest de typeDATETIMEouDATE, qui indique la date de début.expression est une expression qui donne une durée à ajouter ou à retrancher à la date de début.expression est une chaîne qui peut commencer par un signe moins (``-''), pour indiquer une durée négative.typeest un mot clé qui indique comment l'expression doit être considéré. La table suivante établit la relationtypeetexpression :
MySQL allows any non-numeric delimiter in the| typevalue | Meaning | Expected exprformat |  | SECOND | Seconds | SECONDS |  | MINUTE | Minutes | MINUTES |  | HOUR | Hours | HOURS |  | DAY | Days | DAYS |  | MONTH | Months | MONTHS |  | YEAR | Years | YEARS |  | MINUTE_SECOND | Minutes and seconds | "MINUTES:SECONDS" |  | HOUR_MINUTE | Hours and minutes | "HOURS:MINUTES" |  | DAY_HOUR | Days and hours | "DAYS HOURS" |  | YEAR_MONTH | Years and months | "YEARS-MONTHS" |  | HOUR_SECOND | Hours, minutes, | "HOURS:MINUTES:SECONDS" |  | DAY_MINUTE | Days, hours, minutes | "DAYS HOURS:MINUTES" |  | DAY_SECOND | Days, hours, minutes, seconds | "DAYS HOURS:MINUTES:SECONDS" |  exprformat.
The ones shown in the table are the suggested delimiters.  If thedateargument is aDATEvalue and your calculations involve onlyYEAR,MONTHandDAYparts (that is, no time parts), the
result is aDATEvalue.  Otherwise the result is aDATETIMEvalue.
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL 1 SECOND);
        -> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL 1 DAY);
        -> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL "1:1" MINUTE_SECOND);
        -> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
                       INTERVAL "1 1:1:1" DAY_SECOND);
        -> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
                       INTERVAL "-1 10" DAY_HOUR);
        -> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
        -> 1997-12-02
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
       -> 1999
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
       -> 199907
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
       -> 20102
MySQL accepte l'utilisation de délimiteurs non-numériques dans le format deexpression . Ceux présentés dans le tableaux ne sont que des suggestions. Si l'argumentdateest au formatDATEet que les calculs font intervenir seulementYEAR,MONTHetDAY(c'est à dire, juste la date, par l'heure.), le résultat est de typeDATE. Sinon, le résultat des de typeDATETIME.
mysql> select DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL 1 SECOND);
        -> 1998-01-01 00:00:00
mysql> select DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL 1 DAY);
        -> 1998-01-01 23:59:59
mysql> select DATE_ADD("1997-12-31 23:59:59",
                       INTERVAL "1:1" MINUTE_SECOND);
        -> 1998-01-01 00:01:00
mysql> select DATE_SUB("1998-01-01 00:00:00",
                       INTERVAL "1 1:1:1" DAY_SECOND);
        -> 1997-12-30 22:58:59
mysql> select DATE_ADD("1998-01-01 00:00:00",
                       INTERVAL "-1 10" DAY_HOUR);
        -> 1997-12-30 14:00:00
mysql> select DATE_SUB("1998-01-02", INTERVAL 31 DAY);
        -> 1997-12-02
Si l'argument de durée est trop court par rapport au mot clé spécifié, MySQL suppose que les parties de gauche sont mises à zéro. Par exemple, avec le mot clé DAY_SECOND, s'attend à trouver le format"JOURS HEURES:MINUTES:SECONDES". Si l'argument de durée est"1:10", supposera que les jours et heures sont à 0, et que seules, les minutes et secondes sont fournies. En un sens, MySQL ignore le type spécifié, et utilise à la placeMINUTE_SECOND. Si les dates sont incorrectes, le résultat estNULL. Par ailleurs, lors de l'utilisation des optionsMONTH,YEAR_MONTHouYEAR, et que dans le mois résultant, la date du jours n'existe pas, elle est automatiquement ramenée à la plus grande valeur qu'elle peut prendre dans ce mois. 
mysql> select DATE_ADD('1998-01-30', Interval 1 month);
        -> 1998-02-28
Note from the preceding example that the word INTERVALand thetypekeyword are not case sensitive. TO_DAYS(date)Retourne l'index du jour par rapport au 1er janvier 0.
mysql> select TO_DAYS(950501);
        -> 728779
mysql> select TO_DAYS('1997-10-07');
        -> 729669
TO_DAYS()n'est pas prévu pour utiliser des dates précédents l'avènement du calendrier Grégorien. (1582).. FROM_DAYS(N)Etant donné un numéro de jour par rapport au 1er janvier 0, retourne une valeur de typeDATE.
mysql> select FROM_DAYS(729669);
        -> '1997-10-07'
FROM_DAYS()n'est pas prévu pour utiliser des dates précédents l'avènement du calendrier Grégorien. (1582). DATE_FORMAT(date,format)Formate la datedateen fonction de la chaîneformat. Les formats suivants peuvent être utilisé dansformat:
Tous les autres caractères sont recopiés, sans interpretation| %M | Month name ( January..December) |  | %W | Weekday name ( Sunday..Saturday) |  | %D | Day of the month with english suffix ( 1st,2nd,3rd, etc.) |  | %Y | Year, numeric, 4 digits |  | %y | Year, numeric, 2 digits |  | %a | Abbreviated weekday name ( Sun..Sat) |  | %d | Day of the month, numeric ( 00..31) |  | %e | Day of the month, numeric ( 0..31) |  | %m | Month, numeric ( 01..12) |  | %c | Month, numeric ( 1..12) |  | %b | Abbreviated month name ( Jan..Dec) |  | %j | Day of year ( 001..366) |  | %H | Hour ( 00..23) |  | %k | Hour ( 0..23) |  | %h | Hour ( 01..12) |  | %I | Hour ( 01..12) |  | %l | Hour ( 1..12) |  | %i | Minutes, numeric ( 00..59) |  | %r | Time, 12-hour ( hh:mm:ss [AP]M) |  | %T | Time, 24-hour ( hh:mm:ss) |  | %S | Seconds ( 00..59) |  | %s | Seconds ( 00..59) |  | %p | AMorPM |  | %w | Day of the week ( 0=Sunday..6=Saturday) |  | %U | Week ( 0..52), where Sunday is the first day of the week |  | %u | Week ( 0..52), where Monday is the first day of the week |  | %% | A literal `%'. |  
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
        -> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
                          '%D %y %a %d %m %b %j');
        -> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
                          '%H %k %I %r %T %S %w');
        -> '22 22 10 10:23:00 PM 22:23:00 00 6'
Depuis MySQL 3.23, le caractère %est obligatoire devant le caractère de format. Dans les versions antérieures de MySQL,%il était optionnel. TIME_FORMAT(time,format)Utilisation identique àDATE_FORMAT(), mais seulement pour les heures (heures, minutes secondes). Les autres arguments conduisent à un résultat aNULLou0.CURDATE()CURRENT_DATERetourne la date du jour, au format'YYYY-MM-DD'ouYYYYMMDD, suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select CURDATE();
        -> '1997-12-15'
mysql> select CURDATE() + 0;
        -> 19971215
CURTIME()CURRENT_TIMERetourne l'heure du jour, au format'HH:MM:SS'orHHMMSS, suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select CURTIME();
        -> '23:50:26'
mysql> select CURTIME() + 0;
        -> 235026
NOW()SYSDATE()CURRENT_TIMESTAMPRetourne la date et l'heure du jour, au format'YYYY-MM-DD HH:MM:SS'orYYYYMMDDHHMMSS, suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select NOW();
        -> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
        -> 19971215235026
UNIX_TIMESTAMP()UNIX_TIMESTAMP(date)Utilisé sans argument, retourne un timestamp Unix (le nombre de secondes depuis'1970-01-01 00:00:00'GMT) . Utilisé avec un argument de typedate, il renvoie le timestamp Unix correspondant à cette date.DATEpeut être aux formats chaîneDATEchaîne,DATETIMEchaîne,TIMESTAMP, ou un nombre au formatYYMMDDouYYYYMMDD.
mysql> select UNIX_TIMESTAMP();
        -> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
        -> 875996580
Quand un FROM_UNIXTIME(unix_timestamp)
Retourne la représentation de l'argumentUNIX_TIMESTAMPest affecté à une colonne de type TIMESTAMP, l'affectation sera directe, avec aucune conversion implicite. unix_timestampau format'YYYY-MM-DD HH:MM:SS'orYYYYMMDDHHMMSSsuivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select FROM_UNIXTIME(875996580);
        -> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
        -> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)Retourne la représentation de l'argumentunix_timestampau formatformat, suivant que la fonction est utilisée en contexte chaîne ou numérique. Le format est spécifié comme pour la fonction theDATE_FORMAT().
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
                            '%Y %D %M %h:%i:%s %x');
        -> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)Converti l'argumentsecondsen heures, minutes et secondes, au format'HH:MM:SS'orHHMMSS, suivant que la fonction est utilisée en contexte chaîne ou numérique
mysql> select SEC_TO_TIME(2378);
        -> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
        -> 3938
TIME_TO_SEC(time)Retourne l'argumenttime, converti en secondes.
mysql> select TIME_TO_SEC('22:23:00');
        -> 80580
mysql> select TIME_TO_SEC('00:39:38');
        -> 2378
 DATABASE()Retourne le nom de la base de données courante
mysql> select DATABASE();
        -> 'test'
S'il n'y a pas de base de données courante, USER()DATABASE()retourne une chaîne vide. SYSTEM_USER()SESSION_USER()Retourne le nom de l'utilisateur MySQL courant.
mysql> select USER();
        -> 'davida@localhost'
Avec MySQL 3.22.11 ou plus récent, le nom de l'utilisateur courant contient le nom du de l'hôte client. On peut alors en extraire le nom du User.
 
mysql> select left(USER(),instr(USER(),"@")-1);
        -> 'davida'
PASSWORD(str)Calcule un mot de passe à partir du texte destr. C'est une fonction d'encryption utilisée par MySQL pour stocker les mots de passes dans la colonnePassword, de la table des droits des utilisateurs.
mysql> select PASSWORD('badpwd');
        -> '7f84554057dd964b'
Le cryptage de PASSWORD()n'est pas reversible.PASSWORD()effectue un cryptage différent de celui d'Unix. Il ne faut pas croire que si le mot de passe de MySQL et d'Unix sont les mêmes, alors les deux valeurs cryptées seront les mêmes. VoirENCRYPT(). ENCRYPT(str[,salt])Crypte la chaînestren utilisant le cryptage d'Unix(crypt())l. Le grain de sel est une chaîne avec deux caractères.
mysql> select ENCRYPT("hello");
        -> 'VxuFAJXVARROc'
Si la commande ENCODE(str,pass_str)
Crypte la chaînecrypt()n'est pas disponible sur votre système,ENCRYPT()retourneraNULL.ENCRYPT()n'utilise que les 8 premiers caractères de la chaîne, sur certains systèmes. Cela dépendra du comportement de l'appel système :crypt(). stren utilisant de mot de passepass_str. Pour décrypter le résultat, il faut utiliserDECODE(). Le résultat est une chaîne binaire. Pour l'enregistrer, il faut l'affecter à une colonne de typeBLOB.DECODE(crypt_str,pass_str)Décrypte la chaîne cryptéecrypt_str, en utilisant le mot de passepass_str.crypt_strdoit être une chaîne retournée parENCODE().MD5(string)Calcule la somme de vérification MD5 de ma chaîne. La valeur retournée est un nombre hexadécimal de 32 bits, utilisé comme clé.
mysql> select MD5("testing")
        -> 'ae2b1fca515949e5d54fb22b8ed95575'
Cette fonction est issue de "RSA Data Security, Inc. MD5 Message-Digest Algorithm". 
 LAST_INSERT_ID([expression ])Retourne la dernière valeur générée automatiquement lors de la mise à jour d'une colonne de typeAUTO_INCREMENTVoir Sectionmysql_insert_id.
mysql> select LAST_INSERT_ID();
        -> 195
Le dernier ID généré est conservé par le serveur, sur la base d'un par connexion. Il ne sera pas changé par un autre client. Il ne sera même pas changé par la mise à jour d'une colonne de type Création d'une table :AUTO_INCREMENT. Siexpression est donné comme argument àLAST_INSERT_ID()dans une clause , alors la valeur de l'argument est retournée, en tant queLAST_INSERT_ID(). Cela peut être utile pour simuler des séquences. Par exemple : 
mysql> create table sequence (id int not null);
mysql> insert into sequence values (0);
 
Alors la table peut être utilisée pour générer une séquence de nombre comme ceci :
 
mysql> update sequence set id=LAST_INSERT_ID(id+1);
 
Il est possible de générer des séquences sans appeler FORMAT(X,D)
Met le nombreLAST_INSERT_ID(), mais l'interêt de cette fonction et que l'ID est conservé par le serveur en tant que dernière valeur générée. Il est ainsi possible d'obtenir un nouvel ID comme lors de la lecture de n'importe quelle colonne de type AUTO_INCREMENT. Par exemple,LAST_INSERT_ID()(sans argument) retournera un nouvel ID . La méthode C APImysql_insert_id()peut aussi être utilisée pour obtenir une telle valeur. Xau format'#,###,###.##'avecDdécimales. SiDvaut0, le résultat n'aura ni décimales, ni virgule.
mysql> select FORMAT(12332.1234, 2);
        -> '12,332.12'
mysql> select FORMAT(12332.1,4);
        -> '12,332.1000'
mysql> select FORMAT(12332.2,0);
        -> '12,332'
VERSION()Retourne la version du serveur MySQL .
mysql> select VERSION();
        -> '3.22.19b-log'
GET_LOCK(str,timeout)Essaie d'obtenir le verrous nommé str, avec un timeout detimeoutsecondes. Retourne 1 si le verrous a pu être obtenu, 0 en cas d'échec, ou si une erreur est survenue (comme par exemple, plus de mémoire disponible, ou le thread a été tué par l'administrateur). Un verrou est libéré avec la fonctionRELEASE_LOCK(), avec l'exécution de la fonctionGET_LOCK()ou la mort du thread courant. Cette fonction peut être utilisée pour implémenter des verrous d'applications, ou simuler des verrous sur les enregistrements.
mysql> select GET_LOCK("lock1",10);
        -> 1
mysql> select GET_LOCK("lock2",10);
        -> 1
mysql> select RELEASE_LOCK("lock2");
        -> 1
mysql> select RELEASE_LOCK("lock1");
        -> NULL
Il faut noter que le deuxième appel à RELEASE_LOCK(str)
Libère le verrous nomméRELEASE_LOCK()retourneNULLcar le verrou"lock1"a été automatiquement libéré par le deuxième appel àGET_LOCK(). str, obtenu par l'appel de GET_LOCK(). Retourne 1 si le verrous a bien été libéré, et 0 si il n'était pas mis par ce thread (dans ce cas, il reste verrouillé), et si ce verrous n'existe pas. Le verrous n'existe pas tant qu'il n'a pas été créer parGET_LOCK() ou si il a déjà été libéré.
BENCHMARK(count,expression )
La fonction deBENCHMARKexécute l'expression expressioncountfois. Cela permet de mesurer le temps que MySQL met à exécuter l'expression. Le résultat est toujours0. Le temps mis pour l'exécution de la commande est disponible sur l'affichage du client MySQL.
mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
+----------------------------------------------+
| BENCHMARK(1000000,encode("bonjour","ca va")) |
+----------------------------------------------+
|                                            0 |
+----------------------------------------------+
1 row in set (4.74 sec)
Le temps affiché sur le client est le temps entre le début et la fin de l'exécution, et non pas le temps de travail du processeur. Il peut être nécessaire d'éxécuter plusieurs fois la commande, pour prendre en compte la charge de la machine.
 
 
L'utilisation d'une fonction de regroupement dans une commande qui ne contient pas la clause GROUP BYest équivalent à regrouper toutes les lignes. COUNT(expression )Retourne le nombre de lignes non-NULLobtenue par une commandeSELECT.
mysql> select student.student_name,COUNT(*)
           from student,course
           where student.student_id=course.student_id
           GROUP BY student_name;
COUNT(*)est optimisé pour compter très rapidement les lignes obtenues par unSELECTsur une seule table, sans qu'aucune autre colonne ne soit demandée, et sans clauseWHERE. Par exemple : 
mysql> select COUNT(*) from student;
 COUNT(DISTINCT expression ,[expression ...])Retourne le nombre de ligne distinctes.
mysql> select COUNT(DISTINCT results) from student;
 
Avec MySQL il est possible d'obtenir le nombre de combinaison d'expressions distinctes en donnant une liste d'expression. E, ANSI SQL, il aurait fallu concaténer les expressions avec CODE(DISTINCT ..). AVG(expression )Retourne la moyenne des valeurs deexpression .
mysql> select student_name, AVG(test_score)
           from student
           GROUP BY student_name;
MIN(expression )MAX(expression )Retourne le minimum ou le maximum deexpression .MIN()etMAX()peuvent travailler avec des chaînes. Dans ce cas, il retourne la chaîne minimum maximum .
mysql> select student_name, MIN(test_score), MAX(test_score)
           from student
           GROUP BY student_name;
SUM(expression )Retourne la somme deexpression . Si l'ensemble n'a aucune ligne, le résultat estNULL!STD(expression )STDDEV(expression )Retourne la déviation standard deexpression . C'est une extension à la norme ANSI SQL. La fonctionSTDDEV()est fourni pour assurer la comptabilité avec les bases Oracle.BIT_OR(expression )Retourne le OU logique bit-à-bit, effectué surexpression . Ce calcul est fait sur 64 bits (précision deBIGINT).BIT_AND(expression )Retourne le ET logique bit-à-bit, effectué surexpression . Ce calcul est fait sur 64 bits (précision deBIGINT).
MySQL permet une utilisation étendue de GROUP BY. Il est possible de faire des calculs sur des colonnes dans leSELECTmême si elles n'apparaissent pas dans leGROUP BY. Cela est possible pour n'importe quelle valeur de ce groupe. Cela permet de gagner en performance en évitant de faire des regroupements ou des tris sur des valeurs inutiles. Par exemple, il n'y a pas besoin de faire un regroupement aveccustomer.namedans la requête suivante : 
mysql> select order.custid,customer.name,max(payments)
       from order,customer
       where order.custid = customer.custid
       GROUP BY order.custid;
La norme ANSI SQL impose d'ajouter customer.namedans la clauseGROUP BY. Avec MySQL, c'est redondant. 
Il ne faut pas utiliser cette particularité si les noms de colonnes ne sont pas unique dans le groupe courant.
 
Dans certains cas, il est possible d'utiliser MIN()etMAX()pour obtenir la valeur d'une colonne spécifique, même si elle n'est pas unique. Par exemple, cette requête retourne la valeur decolumn, de la ligne qui contient la colonne sortla plus courte. 
substr(MIN(concat(sort,space(6-longueur(sort)),column),7,longueur(column)))
 
Il faut noter que avec MySQL 3.22 (ou avant), ou en suivant la norme ANSI SQL, il ne faut pas utiliser d'expressions dans les clauses GROUP BYouORDER BY. Il faut alors contourner la difficulté en utilisant un alias. 
mysql> SELECT id,FLOOR(value/100) AS val FROM Nom_table
           GROUP BY id,val ORDER BY val;
Avec MySQL 3.23, on peut écrire :
 
mysql> SELECT id,FLOOR(value/100) FROM Nom_table ORDER BY RAND();
 
 |