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

Hàm TRANSLATE () trong Oracle

Trong Oracle, TRANSLATE() chức năng cho phép bạn thực hiện một số thay thế một ký tự, một ký tự trong một thao tác.

Nó trả về chuỗi được cung cấp dưới dạng đối số đầu tiên sau khi một số ký tự được chỉ định trong đối số thứ hai được dịch thành nhóm ký tự đích được chỉ định trong đối số thứ ba.

Nó tương tự như REPLACE() , ngoại trừ REPLACE() hàm thay thế toàn bộ chuỗi bằng một chuỗi khác (tức là không phải từng ký tự, như TRANSLATE() hiện).

Cú pháp

Cú pháp như sau:

TRANSLATE(expr, from_string, to_string)

Hàm trả về expr với tất cả các lần xuất hiện của mỗi ký tự trong from_string được thay thế bằng ký tự tương ứng của nó trong to_string .

Ví dụ

Đây là một ví dụ cơ bản:

SELECT 
    TRANSLATE('Cat', 'at', 'ow')
FROM DUAL;

Kết quả:

Cow

Đây, at các ký tự đã được thay thế bằng ow .

Trong trường hợp này, REPLACE() chức năng sẽ tạo ra cùng một kết quả. Đây là hai chức năng cạnh nhau:

SELECT 
  TRANSLATE('Cat', 'at', 'ow') AS "TRANSLATE",
  REPLACE('Cat', 'at', 'ow') AS "REPLACE"
FROM DUAL;

Kết quả:

   TRANSLATE    REPLACE 
____________ __________ 
Cow          Cow       

Trong trường hợp này, kết quả cho cả hai chức năng là như nhau, nhưng vì những lý do khác nhau.

Đây là những gì mỗi chức năng đã làm:

  • TRANSLATE() đã thay thế at (từng nhân vật riêng lẻ)
  • REPLACE() đã thay thế at (chuỗi)

Thứ tự hỗn hợp

Ví dụ này minh họa nơi TRANSLATE() khác với REPLACE() . Trong ví dụ này, tôi thay đổi thứ tự của các ký tự được thay thế, cũng như các ký tự để thay thế chúng:

SELECT 
  TRANSLATE('Cat', 'ta', 'wo') AS "TRANSLATE",
  REPLACE('Cat', 'ta', 'wo') AS "REPLACE"
FROM DUAL;

Kết quả:

   TRANSLATE    REPLACE 
____________ __________ 
Cow          Cat       

Trong trường hợp này, chỉ có TRANSLATE() chức năng đã có hiệu lực. Điều này là do chức năng này đi qua từng ký tự một. REPLACE() mặt khác, tìm kiếm toàn bộ chuỗi, theo đúng thứ tự.

Một ví dụ mạnh mẽ hơn

Ví dụ này minh họa một tình huống trong đó TRANSLATE() hàm có lợi ích đáng kể so với REPLACE() chức năng:

SELECT 
    TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()')
FROM DUAL;

Kết quả:

2*(3+4)/(7-2)

Để nhận được kết quả tương đương bằng cách sử dụng REPLACE() , chúng tôi cần thực hiện điều này:

SELECT
REPLACE
(
      REPLACE
      (
            REPLACE
            (
                  REPLACE
                  (
                        '2*[3+4]/{7-2}',
                        '[',
                        '('
                  ),
                  ']',
                  ')'
            ),
            '{',
            '('
      ),
      '}',
      ')'
)
FROM DUAL;

Kết quả:

2*(3+4)/(7-2)

Ví dụ trên dựa trên tài liệu của Microsoft cho T-SQL TRANSLATE() , tương tự như phiên bản Oracle.

Không phù hợp

Nếu không có kết quả phù hợp nào, TRANSLATE() trả về chuỗi không thay đổi:

SELECT 
  TRANSLATE('Cat', 'x', 'y')
FROM DUAL;

Kết quả:

Cat

Phân biệt chữ hoa chữ thường

TRANSLATE() hàm thực hiện so khớp phân biệt chữ hoa chữ thường:

SELECT 
  TRANSLATE('Cat', 'AT', 'ow')
FROM DUAL;

Kết quả:

Cat

Trong ví dụ này, trường hợp không khớp và do đó, chuỗi ban đầu được trả về không thay đổi.

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 
  TRANSLATE('Cat', 'at', '') AS r1,
  TRANSLATE('Cat', '', 'ow') AS r2,
  TRANSLATE('', 'at', 'ow') AS r3
FROM DUAL;

Kết quả:

     R1      R2      R3 
_______ _______ _______ 
null    null    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.

Ký tự không gian

Chuỗi trống không giống với ký tự khoảng trắng.

Dưới đây là những gì sẽ xảy ra khi chúng tôi thay đổi chuỗi trống thành dấu cách:

SELECT 
  TRANSLATE('Cat', 'at', ' ') AS r1,
  TRANSLATE('Cat', ' ', 'ow') AS r2,
  TRANSLATE(' ', 'at', 'ow') AS r3
FROM DUAL;

Kết quả:

   R1     R2    R3 
_____ ______ _____ 
C     Cat         

Dưới đây là một ví dụ minh họa cách TRANSLATE()REPLACE() trả về các kết quả khác nhau khi sử dụng ký tự khoảng trắng:

SELECT 
    TRANSLATE(' ', ' ', 'Cow') AS TRANSLATE,
    REPLACE(' ', ' ', 'Cow') AS REPLACE
FROM DUAL; 

Kết quả:

   TRANSLATE    REPLACE 
____________ __________ 
C            Cow       

Đối số rỗng

Chuyển null đối với bất kỳ đối số nào trả về null :

SET NULL 'null';
SELECT 
    TRANSLATE(null, 'dog', 'cat') AS "1",
    TRANSLATE('Black dog', null, 'cat') AS "2",
    TRANSLATE('Black dog', 'dog', null) AS "3"
FROM DUAL;

Kết quả:

      1       2       3 
_______ _______ _______ 
null    null    null   

Thiếu đối số

Gọi TRANSLATE() mà không chuyển bất kỳ đối số nào dẫn đến lỗi:

SELECT TRANSLATE()
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT TRANSLATE()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Quá nhiều đối số

Và việc chuyển quá nhiều đối số sẽ trả về lỗi:

SELECT TRANSLATE('Cat', 'a', 'b', 'c')
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT TRANSLATE('Cat', 'a', 'b', 'c')
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. Nhà phát triển SQL Oracle:Không thành công - Kiểm tra không thành công:Bộ điều hợp mạng không thể thiết lập kết nối?

  2. Cách cắt ngắn TABLE trong Oracle

  3. Từng bước cài đặt R12.2.6 EBS trên Virtual Box

  4. Chuyển đổi múi giờ trong truy vấn SQL

  5. Thoát khỏi báo giá đơn trong PLSQL