Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm SOUNDEX () trong Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Phân tích cú pháp chuỗi được phân tách bằng dấu phẩy và sử dụng làm phép nối

  2. Xuất Bảng Oracle sang Trang tính Excel

  3. Trang web ngừng hoạt động và nguồn cấp dữ liệu Twitter

  4. Làm cách nào để tắt kích hoạt trong Oracle SQL Developer?

  5. khóa ngoại có luôn tham chiếu đến khóa duy nhất trong bảng khác không?