Trong Oracle, SOUNDEX()
hàm trả về một chuỗi ký tự chứa biểu diễn ngữ âm của đối số của nó. Đây được gọi là chuỗi Soundex.
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(char)
Ở đâu char
là chuỗi để trả về chuỗi Soundex. Nó có thể thuộc bất kỳ kiểu dữ liệu nào CHAR
, VARCHAR2
, NCHAR
hoặc NVARCHAR2
. Giá trị trả về có cùng kiểu dữ liệu với đối số.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT SOUNDEX('Bat')
FROM DUAL;
Kết quả:
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')
FROM DUAL;
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('Ponzi'),
SOUNDEX('Bracket'),
SOUNDEX('Heavy')
FROM DUAL;
Kết quả:
SOUNDEX('PONZI') SOUNDEX('BRACKET') SOUNDEX('HEAVY') ___________________ _____________________ ___________________ P520 B623 H100
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
FROM DUAL;
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
country_name,
SOUNDEX(country_name)
FROM countries
FETCH FIRST 10 ROWS ONLY;
Kết quả:
COUNTRY_NAME SOUNDEX(COUNTRY_NAME) _______________ ________________________ Argentina A625 Australia A236 Belgium B425 Brazil B624 Canada C530 Switzerland S326 China C500 Germany G655 Denmark D562 Egypt E213
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
employee_id,
first_name,
last_name
FROM employees
WHERE SOUNDEX(first_name) = SOUNDEX('Stephen');
Kết quả:
EMPLOYEE_ID FIRST_NAME LAST_NAME ______________ _____________ ____________ 100 Steven King 128 Steven Markle 138 Stephen Stiles
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:
SET NULL 'null';
SELECT SOUNDEX('')
FROM DUAL;
Kết quả:
null
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Đối số rỗng
Chuyển null
trả về null
:
SELECT SOUNDEX(null)
FROM DUAL;
Kết quả:
null
Thiếu đối số
Đang gọi SOUNDEX()
mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT SOUNDEX()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT SOUNDEX() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action:
Và việc chuyển quá nhiều đối số cũng dẫn đến lỗi:
SELECT SOUNDEX('Gosh', 'Dang')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT SOUNDEX('Gosh', 'Dang') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: