Една от низовите функции в MySQL е STRCMP()
. Тази функция ви позволява да сравнявате два низа според реда им на сортиране.
Функцията приема два аргумента. Всеки аргумент е низът за сравнение. Връща или 1
, -1
или 0
, в зависимост от това дали първият низ е по-голям, по-малък или със същия размер като втория низ, според реда на сортиране.
Синтаксис
Ето синтаксиса:
STRCMP(expr1,expr2)
Където expr1
е първият низ и expr2
е вторият низ.
Примери
Ето пример, при който първият низ е по-малък от втория според реда на сортиране:
ИЗБЕРЕТЕ STRCMP('A', 'B');
Резултат:
+-----------------+| STRCMP('A', 'B') |+-----------------+| -1 |+------------------+
Ако разменим аргументите, получаваме това:
ИЗБЕРЕТЕ STRCMP('B', 'A');
Резултат:
+-----------------+| STRCMP('B', 'A') |+------------------+| 1 |+------------------+
И ако използваме един и същ низ за двата аргумента, получаваме това:
ИЗБЕРЕТЕ STRCMP('A', 'A');
Резултат:
+-----------------+| STRCMP('A', 'A') |+------------------+| 0 |+------------------+
Разбира се, низовете могат (и вероятно ще) се състоят от повече от един знак:
ИЗБЕРЕТЕ STRCMP('Голяма кутия', 'Вятър и дъжд') КАТО резултат;
Резултат:
+--------+| Резултат |+--------+| -1 |+--------+
Сравняване
STRCMP()
функцията използва съпоставянето, когато сравнява низовете. Това означава, че можете да получите различни резултати в зависимост от използваното съпоставяне. Следните примери демонстрират това.
Регистърът не е чувствителен
В този пример ние извършваме сравнението, използвайки съпоставяне без значение на малки и големи букви (_ci
част от съпоставянето означава независимо от главните букви):
SET @lowercase =_utf8mb4 'a' COLLATE utf8mb4_0900_ai_ci;SET @uppercase =_utf8mb4 'A' COLLATE utf8mb4_0900_ai_ci;ИЗБЕРЕТЕ STRCMP(@lowercase, @uppercase;
Резултат:
+--------+| Резултат |+--------+| 0 |+-------+
Регистърът е чувствителен
В този пример ние извършваме сравнението, използвайки съпоставяне, чувствително към главни букви (_cs
част от съпоставянето означава, че малките букви са чувствителни):
SET @lowercase =_utf8mb4 'a' COLLATE utf8mb4_0900_as_cs;SET @uppercase =_utf8mb4 'A' COLLATE utf8mb4_0900_as_cs;SELECT STRCMP(@lowercase, @uppercase) AS Result;Резултат:
+--------+| Резултат |+--------+| -1 |+--------+В MySQL съпоставянето може да бъде зададено на различни нива (например ниво на връзка, ниво на база данни, ниво на колона и т.н.). Ако не сте сигурни какво съпоставяне се използва, вижте Как да намерите съпоставянето в MySQL.