Trong MariaDB, bạn có thể sử dụng SOUNDS LIKE
trong một truy vấn để đối sánh các từ nghe giống nhau.
Cú pháp
Cú pháp như sau:
expr1 SOUNDS LIKE expr2
Cũng giống như thực hiện điều này:SOUNDEX(expr1) = SOUNDEX(expr2)
.
Soundex là một thuật toán phiên âm để lập chỉ mục tên theo âm thanh, như được phát âm trong tiếng Anh. Nếu hai từ phát ra âm thanh giống nhau, chúng phải có cùng chuỗi Soundex. Nếu hai từ nghe giống nhau nhưng không hoàn toàn giống nhau, thì chuỗi Soundex của chúng có thể trông giống nhau nhưng không hoàn toàn giống nhau.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT 'Two' SOUNDS LIKE 'Too';
Kết quả:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
Trong trường hợp này, hai từ nghe giống nhau.
Chúng ta có thể sử dụng SOUNDEX()
hàm trả về chuỗi Soundex của mỗi từ:
SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Kết quả:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
Các dây Soundex giống hệt nhau. Đây là lý do tại sao SOUNDS LIKE
trả về 1
.
Không phù hợp
Dưới đây là một ví dụ về hai từ không giống nhau:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Kết quả:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
Trong trường hợp này, chúng tôi nhận được 0
, bởi vì các từ nghe không giống nhau. Có lẽ, dây Soundex của họ khác nhau. Hãy cùng tìm hiểu:
SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Kết quả:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
Chuẩn rồi. Các chuỗi Soundex khác nhau.
Ví dụ về cơ sở dữ liệu
Dưới đây là một ví dụ về việc sử dụng SOUNDS LIKE
trong WHERE
mệnh đề của một truy vấn cơ sở dữ liệu:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Kết quả:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Ở đây nó đang sử dụng SOUNDEX()
chức năng để làm điều tương tự:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Kết quả:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+