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.