sql >> Databasteknik >  >> RDS >> Mysql

Hur man använder STRCMP() för att jämföra 2 strängar i MySQL

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.


  1. En översikt över kluster-till-kluster-replikering

  2. BEGIN - END block atomära transaktioner i PL/SQL

  3. Sekvenser som inte påverkas av transaktioner?

  4. Hur man skickar strängarray i SQL-parameter till IN-sats i SQL