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

Hàm TO_CHAR (số) trong Oracle

Trong Cơ sở dữ liệu Oracle, TO_CHAR(number) hàm chuyển đổi một số thành VARCHAR2 giá trị ở định dạng được chỉ định bởi đối số định dạng.

Cú pháp

Cú pháp như sau:

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

Ở đâu:

  • n có thể thuộc loại NUMBER , BINARY_FLOAT hoặc BINARY_DOUBLE .
  • fmt là một mô hình định dạng tùy chọn chỉ định cách định dạng kết quả. Xem các phần tử định dạng số hợp lệ có thể được sử dụng để xây dựng mô hình định dạng của bạn.
  • 'nlsparam' là một đối số tùy chọn chỉ định cách trả về các ký tự khác nhau. Bạn có thể sử dụng nó để chỉ định ký tự thập phân và dấu phân tách nhóm, ký hiệu nội tệ và ký hiệu tiền tệ quốc tế. Nếu đối số này bị bỏ qua thì các giá trị mặc định cho phiên hiện tại sẽ được sử dụng.

Ví dụ

Dưới đây là một ví dụ để chứng minh cách hoạt động của hàm:

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Kết quả:

    RESULT 
__________ 
 12,345   

Đối số đầu tiên là số thực mà chúng tôi đang định dạng và đối số thứ hai là mô hình định dạng. Mô hình định dạng chỉ định cách số được định dạng.

Trong trường hợp này, mô hình định dạng của chúng tôi định dạng số bằng dấu phân tách nhóm ở vị trí thích hợp. Mỗi chữ số được biểu thị bằng 9 và dấu phân tách nhóm được biểu thị bằng G .

Dưới đây là những gì sẽ xảy ra nếu chúng tôi thay đổi một chút mô hình định dạng:

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Kết quả:

     RESULT 
___________ 
 012,345    

Trong trường hợp này, chúng tôi bắt đầu mô hình định dạng bằng 0 tính cách. Điều này trả về số 0 ở đầu bất cứ nơi nào có thể áp dụng. 9 ký tự không trả về các số 0 ở đầu.

Trên thực tế, chúng tôi có thể thay thế tất cả 9 s với 0 s nếu chúng ta muốn. Dưới đây là một so sánh cho thấy kết quả có thể khác nhau đáng kể như thế nào, tùy thuộc vào yếu tố định dạng bạn sử dụng:

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Kết quả:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Ký hiệu tiền tệ

Bạn có thể sử dụng L phần tử định dạng để trả về ký hiệu nội tệ.

Ví dụ:

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Kết quả:

                 RESULT 
_______________________ 
          $12,345.00   

Ví dụ này sử dụng mô hình định dạng xuất ra kết quả bằng ký hiệu nội tệ (được đại diện bởi L ), dấu phân tách nhóm (được đại diện bởi G ), một ký tự thập phân (được đại diện bởi D ), và tất nhiên, mỗi chữ số (được đại diện bởi 9 ).

Ký hiệu nội tệ được xác định bằng giá trị hiện tại của NLS_CURRENCY tham số. Đúng là chúng tôi có thể đã sử dụng ký hiệu đô la ($ ) đối với ký hiệu tiền tệ, nhưng điều đó giả định rằng đơn vị tiền tệ đó được tính bằng đô la. Có nhiều loại tiền tệ khả dụng khác trên khắp thế giới và L phần tử định dạng có thể tự động trả lại ký hiệu nội tệ cho phiên của người dùng.

Xem Cách Kiểm tra Giá trị của Tham số NLS nếu bạn cần kiểm tra.

Xem Danh sách đầy đủ các phần tử định dạng số này trong Oracle để biết danh sách các phần tử định dạng có thể được sử dụng để định dạng số bằng hàm này.

Định dạng mặc định

Nếu bạn bỏ qua fmt đối số, số được chuyển đổi thành VARCHAR2 giá trị đủ dài chính xác để chứa các chữ số có nghĩa của nó.

Dưới đây là một ví dụ về chuyển đổi một số mà không chỉ định định dạng:

SELECT TO_CHAR(525.45)
FROM DUAL;

Kết quả:

525.45

'nlsparam' Đối số

'nlsparam' đối số có thể được sử dụng để chỉ định ký tự thập phân và dấu phân tách nhóm, ký hiệu nội tệ và ký hiệu tiền tệ quốc tế.

Nó có dạng sau:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Ví dụ:

SELECT 
    TO_CHAR(
        1234.56, 
        'L99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Kết quả:

         €1.234,56

Đây là một lần nữa, nhưng lần này tôi thay thế L với C trong mô hình định dạng:

SELECT 
    TO_CHAR(
        1234.56, 
        'C99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Kết quả:

      EUR1.234,56

C trả về ký hiệu tiền tệ ISO, trong trường hợp này là EUR .

Cách loại bỏ đệm

Bạn có thể nhận thấy rằng một số ví dụ có phần đệm được áp dụng ở bên trái kết quả. Phần đệm như vậy có thể được loại bỏ bằng fm công cụ sửa đổi định dạng.

Ví dụ:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Kết quả:

         €1.234,56

Đối số rỗng

Chuyển null kết quả là null :

SET NULL 'null';
SELECT TO_CHAR(null)
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 mà không chuyển bất kỳ đối số nào, dẫn đến lỗi:

SELECT TO_CHAR()
FROM DUAL;

Kết quả:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Chuyển quá nhiều đối số cũng dẫn đến lỗi:

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Kết quả:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thông tin chi tiết

  2. Tạo cơ sở dữ liệu mới và kết nối mới trong Oracle SQL Developer

  3. Không thể chèn Unicode bằng cx-Oracle

  4. Làm thế nào để truy cập cấu trúc và lấy danh sách cột, các kiểu dữ liệu của con trỏ?

  5. Không phải là tháng hợp lệ trong khi chèn dữ liệu trong oracle