Jedną z funkcji napisów w MySQL jest STRCMP()
. Ta funkcja umożliwia porównanie dwóch ciągów znaków zgodnie z ich kolejnością sortowania.
Funkcja przyjmuje dwa argumenty. Każdy argument jest ciągiem do porównania. Zwraca albo 1
, -1
lub 0
, w zależności od tego, czy pierwszy ciąg jest większy, mniejszy lub tego samego rozmiaru co drugi ciąg, zgodnie z porządkiem sortowania.
Składnia
Oto składnia:
STRCMP(expr1,expr2)
Gdzie expr1
jest pierwszym ciągiem i expr2
jest drugim ciągiem.
Przykłady
Oto przykład, w którym pierwszy ciąg jest mniejszy niż drugi ciąg zgodnie z porządkiem sortowania:
SELECT STRCMP('A', 'B');
Wynik:
+------------------+ | STRCMP('A', 'B') | +------------------+ | -1 | +------------------+
Jeśli zamienimy argumenty, otrzymamy to:
SELECT STRCMP('B', 'A');
Wynik:
+------------------+ | STRCMP('B', 'A') | +------------------+ | 1 | +------------------+
A jeśli użyjemy tego samego ciągu dla obu argumentów, otrzymamy to:
SELECT STRCMP('A', 'A');
Wynik:
+------------------+ | STRCMP('A', 'A') | +------------------+ | 0 | +------------------+
Oczywiście łańcuchy mogą (i prawdopodobnie będą) składać się z więcej niż jednego znaku:
SELECT STRCMP('A big box', 'Wind and rain') AS Result;
Wynik:
+--------+ | Result | +--------+ | -1 | +--------+
Składanie
STRCMP()
funkcja używa sortowania podczas porównywania ciągów. Oznacza to, że możesz uzyskać różne wyniki w zależności od użytego sortowania. Poniższe przykłady pokazują to.
Nie uwzględnia wielkości liter
W tym przykładzie wykonujemy porównanie przy użyciu sortowania bez uwzględniania wielkości liter (_ci
część sortowania oznacza, że wielkość liter nie jest rozróżniana):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_ai_ci; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_ai_ci; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Rozróżnianie wielkości liter
W tym przykładzie wykonujemy porównanie przy użyciu sortowania uwzględniającego wielkość liter (_cs
część sortowania oznacza wielkość liter):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_as_cs; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_as_cs; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Wynik:
+--------+ | Result | +--------+ | -1 | +--------+
W MySQL sortowanie można ustawić na różnych poziomach (np. poziom połączenia, poziom bazy danych, poziom kolumn itp.). Jeśli nie masz pewności, jakie sortowanie jest używane, zobacz Jak znaleźć sortowanie w MySQL.