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

Hàm TRANSLATE (… USING) trong Oracle

Trong Oracle, TRANSLATE(...USING) hàm chuyển đổi đối số của nó thành bộ ký tự được chỉ định cho các chuyển đổi giữa bộ ký tự cơ sở dữ liệu và bộ ký tự quốc gia.

Không nên nhầm lẫn hàm này với TRANSLATE() , cho phép bạn thực hiện nhiều ký tự thay thế một-một trong một thao tác.

TRANSLATE(...USING) chức năng được hỗ trợ trong Oracle chủ yếu để tương thích ANSI. Oracle khuyến nghị chúng tôi sử dụng TO_CHAR()TO_NCHAR() thay vào đó là các chức năng.

Cú pháp

Cú pháp như sau:

TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Ở đâu char là biểu thức được chuyển đổi và:

  • Chỉ định USING CHAR_CS đối số chuyển đổi char vào bộ ký tự cơ sở dữ liệu. Kiểu dữ liệu đầu ra là VARCHAR2 .
  • Chỉ định USING NCHAR_CS đối số chuyển đổi char thành bộ chữ quốc ngữ. Kiểu dữ liệu đầu ra là NVARCHAR2 .

Ví dụ

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

SELECT 
    TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
    TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;

Kết quả:

   CHAR_CS    NCHAR_CS 
__________ ___________ 
Cat        Cat        

Để chứng minh sự khác biệt, đây là những gì sẽ xảy ra khi chúng tôi chuyển nó vào DUMP() chức năng:

SELECT 
    DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
    DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;

Kết quả:

              CHAR_CS                       NCHAR_CS 
_____________________ ______________________________ 
Typ=1 Len=3: C,a,t    Typ=1 Len=6: ^@,C,^@,a,^@,t   

Đối số rỗng

Chuyển null khi đối số trả về null :

SET NULL 'null';
SELECT 
    TRANSLATE(null USING CHAR_CS) AS Result
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.

Thiếu đối số

Gọi hàm với mà không chuyển char đối số dẫn đến lỗi:

SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT TRANSLATE(USING CHAR_CS)
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. Hàm tương đương cho DATEADD () trong Oracle

  2. Liên kết lại cơ sở hạ tầng lưới

  3. Làm thế nào để CẬP NHẬT một cột bằng cách sử dụng một cột khác trong bảng khác? Lỗi SQL:ORA-00933:Lệnh SQL không kết thúc đúng cách

  4. Chuyển và trả về đối tượng mảng tùy chỉnh trong ibatis và oracle trong java

  5. Oracle SqlPlus - lưu đầu ra trong một tệp nhưng không hiển thị trên màn hình