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 :
|