L'une des fonctions de chaîne dans MySQL est STRCMP()
. Cette fonction permet de comparer deux chaînes selon leur ordre de tri.
La fonction accepte deux arguments. Chaque argument est la chaîne à comparer. Il renvoie soit 1
, -1
, ou 0
, selon que la première chaîne est plus grande, plus petite ou de la même taille que la deuxième chaîne, selon l'ordre de tri.
Syntaxe
Voici la syntaxe :
STRCMP(expr1,expr2)
Où expr1
est la première chaîne et expr2
est la deuxième chaîne.
Exemples
Voici un exemple où la première chaîne est plus petite que la deuxième chaîne selon l'ordre de tri :
SELECT STRCMP('A', 'B');
Résultat :
+------------------+ | STRCMP('A', 'B') | +------------------+ | -1 | +------------------+
Si nous échangeons les arguments, nous obtenons ceci :
SELECT STRCMP('B', 'A');
Résultat :
+------------------+ | STRCMP('B', 'A') | +------------------+ | 1 | +------------------+
Et si nous utilisons la même chaîne pour les deux arguments, nous obtenons ceci :
SELECT STRCMP('A', 'A');
Résultat :
+------------------+ | STRCMP('A', 'A') | +------------------+ | 0 | +------------------+
Bien entendu, les chaînes peuvent (et seront probablement) composées de plusieurs caractères :
SELECT STRCMP('A big box', 'Wind and rain') AS Result;
Résultat :
+--------+ | Result | +--------+ | -1 | +--------+
Collation
Le STRCMP()
La fonction utilise le classement lors de la comparaison des chaînes. Cela signifie que vous pouvez obtenir des résultats différents selon le classement utilisé. Les exemples suivants le démontrent.
Insensible à la casse
Dans cet exemple, nous effectuons la comparaison en utilisant un classement insensible à la casse (le _ci
une partie de la collation signifie insensible à la casse):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_ai_ci; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_ai_ci; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Sensible à la casse
Dans cet exemple, nous effectuons la comparaison en utilisant un classement sensible à la casse (le _cs
une partie de la collation signifie sensible à la casse) :
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_as_cs; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_as_cs; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Résultat :
+--------+ | Result | +--------+ | -1 | +--------+
Dans MySQL, le classement peut être défini à différents niveaux (par exemple, au niveau de la connexion, au niveau de la base de données, au niveau de la colonne, etc.). Si vous n'êtes pas sûr du classement utilisé, consultez Comment trouver le classement dans MySQL.