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

Cách định dạng số trong Oracle

Trong Cơ sở dữ liệu Oracle, bạn có thể định dạng số theo nhiều cách.

Ví dụ:bạn có thể định dạng một số dưới dạng đơn vị tiền tệ, với dấu phẩy và dấu thập phân ở đúng vị trí. Bạn có thể chỉ định các số 0 ở đầu, bạn có thể thêm một phần phân số - hoặc xóa nó, nếu đó là điều bắt buộc.

Bài viết này bao gồm các ví dụ sau:

  • Định dạng số dưới dạng đơn vị tiền tệ
  • Thêm dấu phẩy / dấu phân cách hàng nghìn
  • Bao gồm các vị trí thập phân
  • Xóa tất cả các vị trí thập phân
  • Thêm các số 0 ở đầu vào một số

Tôi cũng giải thích cách định dạng bị ảnh hưởng bởi các thông số NLS trong phiên của bạn.

Các tham số khởi tạo NLS xác định ký tự nào được sử dụng cho dấu phân tách nhóm, ký tự thập phân và ký hiệu tiền tệ trong phiên hiện tại. Bạn có thể tận dụng các tham số này để xuất định dạng nhận biết ngôn ngữ.

Bạn có thể sử dụng các hàm như TO_CHAR(number) và thậm chí LPAD() để chuyển đổi các số thành một chuỗi và định dạng chúng chính xác như bạn muốn một cách nhanh chóng. Các hàm như CAST() cũng có thể ảnh hưởng đến cách một số được định dạng, tùy thuộc vào loại dữ liệu mà nó đang được truyền.

Một ví dụ nhanh

Dưới đây là một ví dụ nhanh về định dạng một số bằng TO_CHAR() chức năng:

SELECT 
    TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;

Kết quả:

$12,345.00

fmL99G999D00 một phần là mô hình định dạng xác định cách định dạng đầu ra. Bạn có thể thay đổi mô hình định dạng cho phù hợp với yêu cầu của bạn.

Mỗi ký tự trong mô hình định dạng là một phần tử định dạng và có một ý nghĩa đặc biệt. Bạn có thể thêm hoặc xóa các phần tử định dạng theo yêu cầu.

Dưới đây là danh sách đầy đủ các phần tử định dạng mà bạn có thể sử dụng cho mô hình định dạng của mình khi định dạng số.

Mặc dù đúng là bạn có thể cung cấp một chuỗi ký tự cho các phần tử định dạng khác nhau (ví dụ:ký hiệu đô la ($ ) đối với đô la), điều này giả định rằng đơn vị tiền tệ có giá trị được mã hóa cứng đó. Có nhiều loại tiền tệ khả thi khác trên khắp thế giới và các yếu 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.

Dấu phân tách nhóm và ký tự thập phân cũng vậy. Các ngôn ngữ khác nhau sử dụng các quy ước khác nhau. Việc sử dụng các phần tử định dạng nhận biết ngôn ngữ này làm cho mã của bạn dễ di động hơn.

Ngoài ra, TO_CHAR() hàm cho phép bạn chuyển các tham số NLS của riêng bạn vào trong hàm. Làm như vậy chỉ ảnh hưởng đến lệnh gọi hàm đó, vì vậy bạn có thể thay đổi những thứ như ký hiệu tiền tệ một cách nhanh chóng mà không cần mã hóa nó thành mô hình định dạng của bạn hoặc cập nhật các thông số NLS cho phiên của bạn.

Các ví dụ sau đây cho thấy cách hoạt động chi tiết hơn của từng phần tử định dạng.

Định dạng số dưới dạng tiền tệ

Dưới đây là một ví dụ về định dạng một số dưới dạng đơn vị tiền tệ:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Kết quả:

$12

Trong trường hợp này, tôi đã sử dụng L phần tử định dạng để chỉ định ký hiệu nội tệ. Ký hiệu nội tệ được xác định bằng NLS_CURRENCY tham số.

Ngoài ra, bạn có thể sử dụng C hoặc U các phần tử định dạng, trả về ký hiệu tiền tệ ISO và ký hiệu tiền tệ kép tương ứng.

Xem Cách Định dạng Số dưới dạng Đơn vị tiền tệ trong Oracle để biết thêm thông tin và ví dụ.

Thêm dấu phẩy / dấu phân cách hàng nghìn

Mặc dù bạn luôn có thể sử dụng dấu phẩy được mã hóa cứng cho dấu phân tách hàng nghìn / nhóm của mình, nhưng điều này không tính đến các quốc gia sử dụng dấu chấm cho dấu phân tách nhóm của họ. Điều ngược lại rõ ràng là đúng. Ngoài ra, một số quốc gia phân tách hàng nghìn nhóm bằng một khoảng trống.

Bạn có thể sử dụng G phần tử định dạng để chỉ định dấu phân tách nhóm. Thao tác này tự động trả về dấu phân tách nhóm thích hợp như được chỉ định trong NLS_NUMERIC_CHARACTERS tham số. Tham số này xác định cả dấu phân tách nhóm và ký tự thập phân.

Ví dụ:

SELECT 
    TO_CHAR(12345, 'fm99G999')
FROM DUAL;

Kết quả:

12,345

Dưới đây là một ví dụ khác với số lớn hơn:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Kết quả:

123,456,789

Xem Cách Định dạng Số bằng Dấu phẩy trong Oracle để có thảo luận chi tiết hơn.

Bao gồm các vị trí thập phân

Mặc dù đúng là bạn có thể mã hóa ký tự cơ số của riêng mình (ví dụ:dấu chấm) vào mô hình định dạng, nhưng điều này sẽ không phục vụ cho các ngôn ngữ khác sử dụng ký tự khác.

Bạn có thể sử dụng D phần tử định dạng để trả về ký tự thập phân / cơ số được chỉ định trong NLS_NUMERIC_CHARACTERS tham số cho phiên hiện tại:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Kết quả:

7.00

Trong trường hợp này, tôi đã sử dụng hai 0 định dạng các phần tử sau ký tự cơ số. Phần tử định dạng này trả về các số không ở cuối nếu có.

Sử dụng 9 sẽ loại bỏ bất kỳ số 0 ở cuối nào trong trường hợp này:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Kết quả:

7.

Tuy nhiên, nếu chúng ta xóa fm công cụ sửa đổi định dạng, chúng tôi nhận được một kết quả khác:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Kết quả:

7.00

fm công cụ sửa đổi định dạng ngăn chặn bất kỳ phần đệm nào được áp dụng cho kết quả. Bằng cách loại bỏ nó, kết quả của chúng tôi được đệm. Nó chứa một khoảng trắng ở đầu, bởi vì đây là nơi mà một dấu âm sẽ biến mất nếu số đó là số âm. Và nó cũng chứa các số không ở cuối, vì chúng tôi đã chỉ định hai 9 các yếu tố định dạng.

Xem 3 cách định dạng số thành 2 vị trí thập phân trong Oracle để biết thêm ý tưởng về cách định dạng số với vị trí thập phân.

Xóa tất cả các vị trí thập phân

Có một số cách để định dạng một số để không có chữ số thập phân. Một cách rõ ràng là chỉ cần xóa phần thập phân khỏi chuỗi định dạng của chúng tôi:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Kết quả:

7

Nhưng chúng ta cũng có thể sử dụng các hàm khác, chẳng hạn như ROUND() , TRUNC()CAST() để đạt được hiệu quả tương tự hoặc tương tự.

Xem 4 cách để định dạng một số không có số thập phân trong Oracle để biết các ví dụ.

Thêm Zeros hàng đầu

Chúng tôi có một số tùy chọn khi thêm các số 0 ở đầu vào số của chúng tôi.

Một lần nữa, hãy gắn bó với TO_CHAR() , chúng ta có thể sử dụng 0 phần tử định dạng để trả về các số không ở đầu và cuối.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Kết quả:

007

Nếu chúng tôi đã sử dụng 9 phần tử định dạng, chúng tôi sẽ không có bất kỳ số 0 nào ở đầu:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Kết quả:

7

Tuy nhiên, nếu chúng ta xóa fm công cụ sửa đổi định dạng, chúng tôi sẽ có một khoảng trống mà ở đó bất kỳ số 0 nào đứng đầu sẽ là:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Kết quả:

7

Một cách khác để định dạng một số với các số không ở đầu là với LPAD() hàm số. Hàm này áp dụng phần đệm bên trái cho một chuỗi hoặc số. Bạn có thể chỉ định ký tự / s nào sẽ sử dụng cho phần đệm và do đó, nếu bạn sử dụng số 0, thì ký tự đó sẽ được đệm bằng số không.

Hãy xem 2 cách để định dạng một số với Zeros hàng đầu trong Oracle để làm ví dụ.

Cách kiểm tra các tham số NLS

Các tham số NLS (Hỗ trợ Ngôn ngữ Quốc gia) xác định hành vi theo ngôn ngữ cụ thể trên cả máy khách và máy chủ. Điều này bao gồm các tham số xác định ký tự nào sẽ sử dụng cho dấu phân tách nhóm, ký tự thập phân, ký hiệu tiền tệ, v.v.

Hãy kiểm tra giá trị hiện tại của các thông số NLS của tôi:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Kết quả:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_LANGUAGE               ENGLISH                           
NLS_TERRITORY              AUSTRALIA                         
NLS_CURRENCY               $                                 
NLS_ISO_CURRENCY           AUSTRALIA                         
NLS_NUMERIC_CHARACTERS     .,                                
NLS_CALENDAR               GREGORIAN                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_DATE_LANGUAGE          ENGLISH                           
NLS_CHARACTERSET           AL32UTF8                          
NLS_SORT                   BINARY                            
NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
NLS_DUAL_CURRENCY          $                                 
NLS_NCHAR_CHARACTERSET     AL16UTF16                         
NLS_COMP                   BINARY                            
NLS_LENGTH_SEMANTICS       BYTE                              
NLS_NCHAR_CONV_EXCP        FALSE                            

Các tham số sau xác định các yếu tố định dạng cho số và đơn vị tiền tệ:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Giá trị mặc định của các tham số này được xác định bởi NLS_TERRITORY tham số. Khi chúng tôi đặt giá trị của NLS_TERRITORY , điều này mặc nhiên đặt giá trị cho nhiều tham số khác (bao gồm cả bốn tham số đã đề cập).

Trong trường hợp của tôi, lãnh thổ của tôi là Úc và vì vậy bốn tham số này phản ánh cách các số thường được định dạng ở Úc. Nếu tôi thay đổi nó thành Đức, thì bốn thông số đó sẽ được cập nhật để phản ánh định dạng cho Đức.

Tuy nhiên, bạn có thể đặt từng tham số một cách rõ ràng. Điều này cho phép bạn ghi đè giá trị đã được đặt ngầm bởi NLS_TERRITORY tham số.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA - EclipseLink - Cách thay đổi lược đồ mặc định

  2. Có biểu thức CASE như vậy trong JPQL không?

  3. Trong SQL, việc sử dụng dấu ngoặc đơn với OR có nghĩa là gì?

  4. Các giá trị lặp lại trong một cột

  5. Cách bật tính năng theo dõi trong ứng dụng oracle r12