En av strängfunktionerna i MySQL är STRCMP()
. Denna funktion låter dig jämföra två strängar enligt deras sorteringsordning.
Funktionen accepterar två argument. Varje argument är strängen att jämföra. Den returnerar antingen 1
, -1
eller 0
, beroende på om den första strängen är större, mindre eller samma storlek som den andra strängen, enligt sorteringsordning.
Syntax
Här är syntaxen:
STRCMP(expr1,expr2)
Där expr1
är den första strängen och expr2
är den andra strängen.
Exempel
Här är ett exempel där den första strängen är mindre än den andra strängen enligt sorteringsordning:
SELECT STRCMP('A', 'B');
Resultat:
+------------------+ | STRCMP('A', 'B') | +------------------+ | -1 | +------------------+
Om vi byter argument runt får vi detta:
SELECT STRCMP('B', 'A');
Resultat:
+------------------+ | STRCMP('B', 'A') | +------------------+ | 1 | +------------------+
Och om vi använder samma sträng för båda argumenten får vi detta:
SELECT STRCMP('A', 'A');
Resultat:
+------------------+ | STRCMP('A', 'A') | +------------------+ | 0 | +------------------+
Naturligtvis kan (och kommer förmodligen) strängarna bestå av mer än ett enda tecken:
SELECT STRCMP('A big box', 'Wind and rain') AS Result;
Resultat:
+--------+ | Result | +--------+ | -1 | +--------+
Sortering
STRCMP()
funktion använder sorteringen när man jämför strängarna. Detta innebär att du kan få olika resultat beroende på vilken sortering som används. Följande exempel visar detta.
Inte skiftlägeskänslig
I det här exemplet utför vi jämförelsen med en skiftlägesokänslig sortering (_ci
del av sammanställningen betyder skiftlägesokänslig):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_ai_ci; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_ai_ci; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
skiftlägeskänslig
I det här exemplet utför vi jämförelsen med en skiftlägeskänslig sortering (_cs
del av sammanställningen betyder skiftlägeskänslig):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_as_cs; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_as_cs; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Resultat:
+--------+ | Result | +--------+ | -1 | +--------+
I MySQL kan sortering ställas in på olika nivåer (t.ex. anslutningsnivå, databasnivå, kolumnnivå, etc). Om du inte är säker på vilken sortering som används, se Hur du hittar sorteringen i MySQL.