Trong MariaDB, SOUNDEX()
là một hàm chuỗi tích hợp trả về chuỗi Soundex từ một chuỗi đã cho.
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.
Hàm chấp nhận một đối số:chuỗi để trả về chuỗi Soundex từ đó.
Cú pháp
Cú pháp như sau:
SOUNDEX(str)
Ở đâu str
là chuỗi để trả về chuỗi Soundex.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT SOUNDEX('Bat');
Kết quả:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Dưới đây là một ví dụ khác so sánh chuỗi Soundex được trả về từ các từ phát âm tương tự nhưng khác nhau:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Kết quả:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
Và đây là một so sánh các từ nghe không giống nhau:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Kết quả:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Tôi nên đề cập rằng chức năng này thực hiện thuật toán Soundex ban đầu loại bỏ các nguyên âm đầu tiên và trùng lặp thứ hai. Điều này trái ngược với phiên bản nâng cao, loại bỏ các bản sao nguyên âm đầu tiên và thứ hai.
Ngoài ra, một chuỗi Soundex tiêu chuẩn dài bốn ký tự, nhưng SOUNDEX()
của MariaDB hàm trả về một chuỗi dài tùy ý. Do đó kết quả trên bao gồm cả các chuỗi Soundex không chuẩn.
Để minh họa ý tôi muốn nói, đây là kết quả tôi nhận được khi sử dụng SOUNDEX()
của Oracle chức năng để làm điều tương tự:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Kết quả:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Kết hợp Chính xác
Dưới đây là ví dụ về các cặp từ có chuỗi Soundex phù hợp, mặc dù chúng là các từ khác nhau, có nghĩa khác nhau:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Kết quả:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Ví dụ về cơ sở dữ liệu
Dưới đây là ví dụ về cách lấy chuỗi Soundex từ truy vấn cơ sở dữ liệu:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Kết quả:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Chúng tôi cũng có thể sử dụng SOUNDEX()
trong một WHERE
mệnh đề để chỉ trả lại những hàng giống như một từ đã cho:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Kết quả:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Tuy nhiên, bạn có thể thích sử dụng SOUNDS LIKE
thay vào đó, đó là một cách ngắn gọn hơn để làm điều tương tự.
Chuỗi trống
Dưới đây là những gì sẽ xảy ra khi một chuỗi trống được chuyển cho mỗi đối số nhất định:
SELECT SOUNDEX('');
Kết quả:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Đối số rỗng
Chuyển null
trả về null
:
SELECT SOUNDEX(null);
Kết quả:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Thiếu đối số
Đang gọi SOUNDEX()
với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT SOUNDEX();
Kết quả:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'