Les fonctions de contrôle
<<<
Fonctions de chaînes de caractères Fonctions numériques
>>>

13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française

Opérateurs et fonctions tous types
Les fonctions de contrôle
->Fonctions de chaînes de caractères
Fonctions numériques
Fonctions de dates et d'heures
Recherche en texte intégral ( Full-text ) dans MySQL
Fonctions de transtypage
Autres fonctions
Fonctions et options à utiliser dans les clauses GROUP BY

13.3 Fonctions de chaînes de caractères

Les fonctions qui traitent les chaînes de caractères retournent NULL si la longueur du résultat finit par dépasser la taille maximale du paramètre max_allowed_packet , défini dans la configuration du serveur. Choix des paramètres du serveur .

Pour les fonctions qui opèrent sur des positions à l'intérieur d'une chaîne, la position initiale est 0.

    ASCII(str)
    Retourne le code ASCII du premier caractère de la chaîne de caractères str . Retourne 0 si la chaîne de caractère str est vide. Retourne NULL si la chaîne de caractères str est NULL . ASCII() fonctionne avec des valeurs numériques entre 0 et 255 .
    
    mysql> SELECT ASCII('2');
            -> 50
    mysql> SELECT ASCII(2);
            -> 50
    mysql> SELECT ASCII('dx');
            -> 100
    Voir aussi la fonction ORD() .
    BIN(N)
    Retourne une chaîne de caractères représentant la valeur binaire de l'argument N , où l'argument N est un nombre de type BIGINT . Cette fonction est un équivalent de CONV(N,10,2) . Retourne NULL si l'argument N est NULL .
    
    mysql> SELECT BIN(12);
            -> '1100'
    BIT_LENGTH(str)
    Retourne le nombre de bits de la chaîne de caractères str .
    
    mysql> SELECT BIT_LENGTH('text');
            -> 32
    BIT_LENGTH() a été ajouté en MySQL 4.0.2.
    CHAR(N,...)
    La fonction CHAR() interprète les arguments comme des entiers et retourne une chaîne de caractères, constituée des caractères, identifiés par leur code ASCII. Les valeurs NULL sont ignorées :
    
    mysql> SELECT CHAR(77,121,83,81,'76');
            -> 'MySQL'
    mysql> SELECT CHAR(77,77.3,'77.3');
            -> 'MMM'
    CHAR_LENGTH(str)
    Retourne le nombre de caractères de la chaîne str : Un caractère multi-octets compte comme un seul caractère. Cela signifie que pour une chaîne contenant 5 caractères de 2 octets, LENGTH() retournera 10 , alors que CHAR_LENGTH() retournera 5 .
    CHARACTER_LENGTH(str)
    CHARACTER_LENGTH() est un synonyme de CHAR_LENGTH() .
    COMPRESS(string_to_compress)
    Compresse une chaîne. Cette fonction requiert la présence de la bibliothèque zlib . Sinon, la valeur retournée sera toujours NULL .
    
    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
            -> 21
    mysql> SELECT LENGTH(COMPRESS(''));
            -> 0
    mysql> SELECT LENGTH(COMPRESS('a'));
            -> 13
    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
            -> 15
    La chaîne compressée est stockée de cette manière :
      Les chaînes vides sont stockées comme des chaînes vides.
      Les chaînes non-vides sont stockées avec 4 octets de plus, indiquant la taille de la chaîne non compressée, suivie de la chaîne compressée. Si la chaîne se termine avec des espaces, un point supplémentaire '.' est ajouté, pour éviter que les espaces terminaux soient supprimés de la chaîne. N'utilisez pas les types CHAR ou VARCHAR pour stocker des chaînes compressée. Il est mieux d'utiliser un type BLOB .
    COMPRESS() a été ajouté en MySQL 4.1.1.

    CONCAT(str1,str2,...)
    Retourne une chaîne représentant la concaténation des arguments. Retourne NULL si un des arguments est NULL . Cette fonction peut prendre plus de 2 arguments. Si un argument est un nombre, il sera converti en son équivalent sous forme de chaîne de caractères :
    
    mysql> SELECT CONCAT('My', 'S', 'QL');
            -> 'MySQL'
    mysql> SELECT CONCAT('My', NULL, 'QL');
            -> NULL
    mysql> SELECT CONCAT(14.3);
            -> '14.3'
    CONCAT_WS(separator, str1, str2,...)
    La fonction CONCAT_WS() signifie CONCAT With Separator , c'est-à-dire "concaténation avec séparateur. Le premier argument est le séparateur utilisé pour le reste des arguments. Le séparateur peut être une chaîne de caractères, tout comme le reste des arguments. Si le séparateur est NULL , le résultat sera NULL . Cette fonction ignorera tous les arguments de valeur NULL et vides, hormis le séparateur. Le séparateur sera ajouté entre tous les arguments à concaténer :
    
    mysql> SELECT CONCAT_WS(",","Premier nom","Deuxième nom","Dernier nom");
           -> 'Premier nom,Deuxième nom,Dernier nom'
    mysql> SELECT CONCAT_WS(",","Premier nom",NULL,"Dernier nom");
           -> 'Premier nom,Dernier nom'
    CONV(N,from_base,to_base)
    Convertit des nombres entre différentes bases. Retourne une chaîne de caractères représentant le nombre N , convertit de la base from_base vers la base to_base . La fonction retourne NULL si un des arguments est NULL . L'argument N est interprété comme un entier, mais peut être spécifié comme un entier ou une chaîne de caractères. Le minimum pour la base est 2 et son maximum est 36 . Si to_base est un nombre négatif, N sera considéré comme un nombre signé. Dans le cas contraire, N sera traité comme un nombre non-signé. La fonction CONV travaille avec une précision de 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'
    ELT(N,str1,str2,str3,...)
    Retourne str1 si N = 1 , str2 si N = 2 , et ainsi de suite. Retourne NULL si N est plus petit que 1 ou plus grand que le nombre d'arguments. La fonction ELT() est un complément de la fonction FIELD() :
    
    mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
            -> 'ej'
    mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
            -> 'foo'
    EXPORT_SET(bits,on,off,[séparateur,[nombre_de_bits]])
    Retourne une chaîne dont tous les bits à 1 dans "bit" sont représentés par la chaîne "on", et dont tous les bits à 0 sont représentés par la chaîne "off". Chaque chaîne est séparée par 'séparateur' (par défaut, une virgule '','' ) et seul "nombre_de_bits" (par défaut, 64) "bits" est utilisé :
    
    mysql> SELECT EXPORT_SET(5,'Y','N',',',4)
            -> Y,N,Y,N
    FIELD(str,str1,str2,str3,...)
    Retourne l'index de la chaîne str dans la liste str1 , str2 , str3 , ... . Retourne 0 si str n'est pas trouvé. La fonction FIELD() est un complément de la fonction ELT() :
    
    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 une valeur de 1 à N si la chaîne str se trouve dans la liste strlist constituée de N chaînes. Une liste de chaîne est une chaîne composée de sous-chaînes séparées par une virgule ',' . Si le premier argument est une chaîne constante et le second, une colonne de type SET , la fonction FIND_IN_SET() est optimisée pour utiliser une recherche binaire très rapide. Retourne 0 si str n'est pas trouvé dans la liste strlist ou si la liste strlist est une chaîne vide. Retourne NULL si l'un des arguments est NULL . Cette fonction ne fonctionne pas correctement si le premier argument contient une virgule ',' :
    
    mysql> SELECT FIND_IN_SET('b','a,b,c,d');
            -> 2
    HEX(N_or_S)
    Si l'argument N_OR_S est un nombre, cette fonction retournera une chaîne de caractère représentant la valeur hexadécimale de l'argument N , où l'argument N est de type BIGINT . Cette fonction est un équivalent de CONV(N,10,16) .Si N_OR_S est une chaîne de caractères, cette fonction retournera une chaîne de caractères hexadécimale de N_OR_S où chaque caractère de N_OR_S est converti en 2 chiffres hexadécimaux. C'est l'inverse de la chaîne 0xff .
    
    mysql> SELECT HEX(255);
            -> 'FF'
    mysql> SELECT HEX("abc");
            -> 616263
    mysql> SELECT 0x616263;
            -> "abc"
    INSERT(str,pos,len,newstr)
    Retourne une chaîne de caractères str , après avoir remplacé la portion de chaîne commençant à la position pos et de longueur len caractères, par la chaîne newstr :
    
    mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
            -> 'QuWhattic'
    Cette fonction gère les caractères multi-octets.
    INSTR(str,substr)
    Retourne la position de la première occurrence de la chaîne substr dans la chaîne de caractères str . Cette fonction est exactement la même que la fonction LOCATE() , à la différence que ces arguments sont inversés :
    
    mysql> SELECT INSTR('foobarbar', 'bar');
            -> 4
    mysql> SELECT INSTR('xbar', 'foobar');
            -> 0
    Cette fonction gère les caractères multi-octets. Dans la version 3.23 de MySQL, cette fonction est sensible à la casse, alors que dans la version 4.0 de MySQL, cette fonction sera sensible à la casse si l'argument est une chaîne de caractères binaire.

    LCASE(str)
    LCASE() est un synonyme de LOWER() .

    LEFT(str,len)
    Retourne les len caractères les plus à gauche de la chaîne de caractères str :
    
    mysql> SELECT LEFT('foobarbar', 5);
            -> 'fooba'
    Cette fonction gère les caractères multi-octets.
    LENGTH(str)
    Retourne la taille de la chaîne str , mesurée en octets. Un caractère multi-octets compte comme un seul caractère. Cela signifie que pour une chaîne contenant 5 caractères de 2 octets, LENGTH() retournera 10 , alors que CHAR_LENGTH() retournera 5 .
    
    mysql> SELECT LENGTH('text');
            -> 4
    LOAD_FILE(file_name)
    Lit le fichier file_name et retourne son contenu sous la forme d'une chaîne de caractères. Le fichier doit se trouver sur le serveur qui exécute MySQL, vous devez spécifier le chemin absolu du fichier et vous devez avoir les droits en lecture sur celui-ci. Le fichier doit pouvoir être lisible par tous et doit être plus petit que max_allowed_packet .Si ce fichier n'existe pas ou ne peut pas être lu pour différentes raisons, la fonction retourne NULL :
    
    mysql> UPDATE tbl_name
               SET blob_column=LOAD_FILE("/tmp/picture")
               WHERE id=1;
    Si vous n'utilisez pas la version 3.23 de MySQL, vous devez lire le fichier depuis votre application et créer ainsi votre requête INSERT vous-même, pour mettre à jour la base de données avec le contenu de ce fichier. Une des possibilités pour réaliser ceci, si vous utilisez la bibliothèque MySQL++, peut être trouvée à http://www.mysql.com/documentation/mysql++/mysql++-examples.html .
    LOCATE(substr,str)
    LOCATE(substr,str,pos)
    Retourne la position de la première occurrence de la chaîne substr dans la chaîne de caractères str . Retourne 0 si substr ne se trouve pas dans la chaîne de caractères str :
    
    mysql> SELECT LOCATE('bar', 'foobarbar');
            -> 4
    mysql> SELECT LOCATE('xbar', 'foobar');
            -> 0
    mysql> SELECT LOCATE('bar', 'foobarbar',5);
            -> 7

    Cette fonction gère les caractères multi-octets. Dans la version 3.23 de MySQL, cette fonction est sensible à la casse, alors que dans la version 4.0 de MySQL, cette fonction sera sensible à la casse si l'argument est une chaîne de caractères binaire.

    LOWER(str)
    Retourne la chaîne str avec tous les caractères en minuscules, en fonction du jeu de caractères courant (par défaut, c'est le jeu ISO-8859-1 Latin1 ) :
    
    mysql> SELECT LOWER('QUADRATIQUE');
            -> 'quadratique'
    Cette fonction gère les caractères multi-octets.

    LPAD(str,len,padstr)
    Retourne la chaîne de caractères str , complétée à gauche par la chaîne de caractères padstr jusqu'à ce que la chaîne de caractères str atteigne len caractères de long. Si la chaîne de caractères str est plus longue que len' caractères, elle sera raccourcie de len caractères.
    
    mysql> SELECT LPAD('hi',4,'??');
            -> '??hi'
    LTRIM(str)
    Retourne la chaîne de caractères str sans les espaces initiaux :
    
    mysql> SELECT LTRIM('  barbar');
            -> 'barbar'
    MAKE_SET(bits,str1,str2,...)
    Retourne une liste (une chaîne contenant des sous-chaînes séparées par une virgule ',' ) constituée de chaînes qui ont le bit correspondant dans la liste bits . str1 correspond au bit 0, str2 au bit 1, etc... Les chaînes NULL dans les listes str1 , str2 , ... sont ignorées :
    
    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');
            -> ''
    MID(str,pos,len)
    MID(str,pos,len) est un synonyme de SUBSTRING(str,pos,len) .

    OCT(N)
    Retourne une chaîne de caractères représentant la valeur octal de l'argument N , où l'argument N est un nombre de type BIGINT . Cette fonction est un équivalent de CONV(N,10,8) . Retourne NULL si l'argument N est NULL :
    
    mysql> SELECT OCT(12);
            -> '14'
    OCTET_LENGTH(str)
    OCTET_LENGTH() est un synonyme de LENGTH() .

    ORD(str)
    Si le premier caractère de la chaîne str est un caractère multi-octets, la fonction retourne le code de ce caractère, calculé à partir du code ASCII retourné par cette formule :
    
    (1st octet * 256)
    + (2nd octet * 256^2)
    + (3rd octet * 256^3) ...
    Si le premier caractère n'est pas un caractère multi-octet, la fonction retournera la même valeur que la fonction ASCII() :
    
    mysql> SELECT ORD('2');
            -> 50
    POSITION(substr IN str)
    POSITION(substr IN str) est un synonyme de LOCATE(substr,str) .
    QUOTE(str)
    Echappe les caractères d'une chaîne pour produire un résultat qui sera exploitable dans une requête SQL. Les caractères suivants seront précédés d'un anti-slash dans la chaîne retournée : le guillemet simple ( ''' ), l'anti-slash ( '\' ), ASCII NUL, et le Contrôle-Z. Si l'argument vaut NULL , la valeur retournée sera le mot `` NULL '' sans les guillemets simples. La fonction QUOTE a été ajoutée en MySQL version 4.0.3.
    
    mysql> SELECT QUOTE("Don't");
            -> 'Don\'t!'
    mysql> SELECT QUOTE(NULL);
            -> NULL
    REPEAT(str,count)
    Retourne une chaîne de caractères constituée de la répétition de count fois la chaîne str . Si count <= 0 , retourne une chaîne vide. Retourne NULL si str ou count sont NULL :
    
    mysql> SELECT REPEAT('MySQL', 3);
            -> 'MySQLMySQLMySQL'
    REPLACE(str,from_str,to_str)
    Retourne une chaîne de caractères str dont toutes les occurrences de la chaîne from_str sont remplacées par la chaîne to_str :
    
    mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
            -> 'WwWwWw.mysql.com'
    Cette fonction gère les caractères multi-octets.

    REVERSE(str)
    Retourne une chaîne dont l'ordre des caractères est l'inverse de la chaîne str :
    
    mysql> SELECT REVERSE('abc');
            -> 'cba'
    Cette fonction gère les caractères multi-octets.
    RIGHT(str,len)
    Retourne les len caractères les plus à droite de la chaîne de caractères str :
    
    mysql> SELECT RIGHT('foobarbar', 4);
            -> 'rbar'
    Cette fonction gère les caractères multi-octets.

    RPAD(str,len,padstr)
    Retourne la chaîne de caractères str , complétée à droite par la chaîne de caractères padstr jusqu'à ce que la chaîne de caractères str atteigne len caractères de long. Si la chaîne de caractères str est plus longue que len' caractères, elle sera raccourcie de len caractères.
    
    mysql> SELECT RPAD('hi',5,'?');
            -> 'hi???'
    RTRIM(str)
    Retourne la chaîne de caractères str sans les espaces finaux :
    
    mysql> SELECT RTRIM('barbar   ');
            -> 'barbar'
    Cette fonction gère les caractères multi-octets.
    SOUNDEX(str)
    Retourne la valeur Soundex de la chaîne de caractères str . Deux chaînes qui ont des sonorités proches auront des valeurs soundex proches. Une chaîne Soundex standard possède 4 caractères, mais la fonction SOUNDEX() retourne une chaîne de longueur arbitraire. Vous pouvez utiliser la fonction SUBSTRING() sur ce résultat pour obtenir une chaîne Soundex standard. Tout caractère non alpha-numérique sera ignoré. Tous les caractères internationaux qui ne font pas partie de l'alphabet de base (A-Z) seront considérés comme des voyelles :
    
    mysql> SELECT SOUNDEX('Hello');
            -> 'H400'
    mysql> SELECT SOUNDEX('Quadratically');
            -> 'Q36324'
    Note : cette fonction implémente l'algorithme soundex original, et non la version populaire améliorée (aussi décrite par D. Knuth). La différence est que la version originale supprime les voyelles, puis les doublons, alors que la version améliorée supprime les doublons d'abord, et ensuite, les voyelles.

    expr1 SOUNDS LIKE expr2
    Identique à SOUNDEX(expr1)=SOUNDEX(expr2) (disponible depuis la version 4.1).

    SPACE(N)
    Retourne une chaîne constituée de N espaces :
    
    mysql> SELECT SPACE(6);
            -> '      '
    SUBSTRING(str,pos)
    SUBSTRING(str FROM pos)
    SUBSTRING(str,pos,len)
    SUBSTRING(str FROM pos FOR len)
    Retourne une chaîne de len caractères de long de la chaîne str , à partir de la position pos . La syntaxe ANSI SQL92 utilise une variante de la fonction FROM :
    
    mysql> SELECT SUBSTRING('Quadratically',5);
            -> 'ratically'
    mysql> SELECT SUBSTRING('foobarbar' FROM 4);
            -> 'barbar'
    mysql> SELECT SUBSTRING('Quadratically',5,6);
            -> 'ratica'
    Cette fonction gère les caractères multi-octets.
    SUBSTRING_INDEX(str,delim,count)
    Retourne une portion de la chaîne de caractères str , située avant count occurrences du délimiteur delim . Si l'argument count est positif, tout ce qui précède le délimiteur final sera retourné. Si l'argument count est négatif, tout ce qui suit le délimiteur final sera retourné :
    
    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
            -> 'www.mysql'
    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
            -> 'mysql.com'
    Cette fonction gère les caractères multi-octets.

    TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
    Retourne la chaîne de caractères str dont tous les préfixes et/ou suffixes remstr ont été supprimés. Si aucun des spécificateurs BOTH , LEADING ou TRAILING sont fournis, BOTH est utilisé comme valeur par défaut. Si remstr n'est pas spécifié, les espaces sont supprimé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'
    Cette fonction gère les caractères multi-octets.
    UCASE(str)
    UCASE() est un synonyme de UPPER() .
    UNCOMPRESS(string_to_uncompress)
    Décompresse une chaîne compressée avec COMPRESS() . Si l'argument n'est pas une valeur compressée, le résultat est NULL . Cette fonction requiert la bibliothèque zlib . Sinon, la valeur retournée est toujours NULL .
    
    mysql> SELECT UNCOMPRESS(COMPRESS('any string'));
            -> 'any string'
    mysql> SELECT UNCOMPRESS('any string');
            -> NULL
    UNCOMPRESS() a été ajoutée en MySQL 4.1.1.
    UNCOMPRESSED_LENGTH(compressed_string)
    Retourne la taille de la chaîne avant compression.
    
    mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
            -> 30
    UNCOMPRESSED_LENGTH() a été ajoutée en MySQL 4.1.1.
    UNHEX(str)

    Le contraire de HEX(string) . C'est à dire, chaque pair de chiffres hexadécimaux sont interprétées comme des nombres, et sont convertis en un caractère représenté par le nombre. Le résultat est retournée sous forme de chaîne binaire.

    
    mysql> SELECT UNHEX('4D7953514C');
            -> 'MySQL'
    mysql> SELECT 0x4D7953514C;
            -> 'MySQL'
    mysql> SELECT UNHEX(HEX('string'));
            -> 'string'
    mysql> SELECT HEX(UNHEX('1267'));
            -> '1267'
    UNHEX() a été ajoutée en MySQL 4.1.2.

    UPPER(str)
    Retourne la chaîne str en majuscules, en fonction du jeu de caractères courant. Par défaut, c'est le jeu ISO-8859-1 Latin1 :
    
    mysql> SELECT UPPER('Hey');
            -> 'HEY'
    Cette fonction gère les caractères multi-octets.

Sommaire :

<< Fonctions de chaînes de caractères >>
Les fonctions de contrôle Fonctions à utiliser dans les clauses SELECT et WHERE Fonctions numériques