Một trong những hàm chuỗi trong MySQL là STRCMP()
. Chức năng này cho phép bạn so sánh hai chuỗi theo thứ tự sắp xếp của chúng.
Hàm chấp nhận hai đối số. Mỗi đối số là một chuỗi để so sánh. Nó trả về 1
, -1
hoặc 0
, tùy thuộc vào việc chuỗi đầu tiên lớn hơn, nhỏ hơn hay cùng kích thước với chuỗi thứ hai, theo thứ tự sắp xếp.
Cú pháp
Đây là cú pháp:
STRCMP(expr1,expr2)
Trong đó expr1
là chuỗi đầu tiên và expr2
là chuỗi thứ hai.
Ví dụ
Dưới đây là một ví dụ trong đó chuỗi đầu tiên nhỏ hơn chuỗi thứ hai theo thứ tự sắp xếp:
SELECT STRCMP('A', 'B');
Kết quả:
+------------------+ | STRCMP('A', 'B') | +------------------+ | -1 | +------------------+
Nếu chúng ta hoán đổi các đối số xung quanh, chúng ta nhận được điều này:
SELECT STRCMP('B', 'A');
Kết quả:
+------------------+ | STRCMP('B', 'A') | +------------------+ | 1 | +------------------+
Và nếu chúng ta sử dụng cùng một chuỗi cho cả hai đối số, chúng ta sẽ nhận được điều này:
SELECT STRCMP('A', 'A');
Kết quả:
+------------------+ | STRCMP('A', 'A') | +------------------+ | 0 | +------------------+
Tất nhiên, các chuỗi có thể (và có thể sẽ) bao gồm nhiều hơn một ký tự:
SELECT STRCMP('A big box', 'Wind and rain') AS Result;
Kết quả:
+--------+ | Result | +--------+ | -1 | +--------+
Đối chiếu
STRCMP()
hàm sử dụng đối chiếu khi so sánh các chuỗi. Điều này có nghĩa là bạn có thể nhận được các kết quả khác nhau tùy thuộc vào đối chiếu đang được sử dụng. Các ví dụ sau đây chứng minh điều này.
Không phân biệt chữ hoa chữ thường
Trong ví dụ này, chúng tôi thực hiện so sánh bằng cách sử dụng đối chiếu không phân biệt chữ hoa chữ thường (_ci
một phần của đối chiếu có nghĩa là không phân biệt chữ hoa chữ thường):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_ai_ci; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_ai_ci; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Phân biệt chữ hoa chữ thường
Trong ví dụ này, chúng tôi thực hiện so sánh bằng cách sử dụng đối chiếu phân biệt chữ hoa chữ thường (_cs
một phần của đối chiếu có nghĩa là phân biệt chữ hoa chữ thường):
SET @lowercase = _utf8mb4 'a' COLLATE utf8mb4_0900_as_cs; SET @uppercase = _utf8mb4 'A' COLLATE utf8mb4_0900_as_cs; SELECT STRCMP(@lowercase, @uppercase) AS Result;
Kết quả:
+--------+ | Result | +--------+ | -1 | +--------+
Trong MySQL, đối chiếu có thể được đặt ở nhiều cấp độ khác nhau (ví dụ:cấp độ kết nối, cấp độ cơ sở dữ liệu, cấp độ cột, v.v.). Nếu bạn không chắc chắn đối chiếu nào đang được sử dụng, hãy xem Cách tìm đối chiếu trong MySQL.