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

Các giá trị không hiển thị với số 0 ở đầu trong oracle

Bạn có thể đến gần bằng một chiếc mặt nạ như 'FM999999990D9999' , với một số 9 thích hợp mỗi bên của số thập phân để bao gồm tất cả các giá trị bạn có thể có.

with tab1 (cola) as (
         select 0.87 from dual
  union  select 661 from dual
  union  select 661.87 res from dual
  union  select 1.5 res from dual
)
select cola, to_char(cola, 'FM999999990D9999')
from tab1;

      COLA TO_CHAR(COLA,'F
---------- ---------------
       .87 0.87           
       1.5 1.5            
       661 661.           
    661.87 661.87         

FM loại bỏ các số 0 ở cuối và khoảng trắng ở đầu (bao gồm cả khoảng trắng danh nghĩa cho dấu +/-).

Để loại bỏ dấu thập phân ở cuối, bạn cũng cần phải loại bỏ nó:

with tab1 (cola) as (
         select 0.87 from dual
  union  select 661 from dual
  union  select 661.87 res from dual
  union  select 1.5 res from dual
)
select cola, rtrim(to_char(cola, 'FM999999990D9999'), to_char(0, 'FMD'))
from tab1;

Tôi bị mắc kẹt với D trong cả hai phần của điều đó; bạn có thể sử dụng . cố định trong cả hai, do đó bạn không cần to_char() thứ hai gọi để chuyển đổi điều đó, nhưng bạn có thể muốn nó được kiểm soát bởi phiên - theo cách nào đó, nó cần phải nhất quán.

Nếu bạn không biết mình cần thêm bao nhiêu số 9, bạn có thể tạo mặt nạ định dạng riêng cho mỗi số, dựa trên số lượng chữ số có trước và sau dấu phân tách thập phân:

with tab1 (cola) as (
            select 0.87 from dual
  union all select 661 from dual
  union all select 661.87 res from dual
  union all select 1.5 res from dual
  union all select 0.00045354543 from dual
)
select cola,
  'FM' || lpad('0', length(trunc(cola)), '9')
       || case when trunc(cola) != cola
               then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9')
          end as format_mask,
  to_char(cola,
    'FM' || lpad('0', length(trunc(cola)), '9')
         || case when trunc(cola) != cola
                 then 'D' || rpad('9', length(cola - trunc(cola)) - 1, '9')
            end) as result
from tab1;

           COLA FORMAT_MASK          RESULT              
--------------- -------------------- --------------------
            .87 FM0D99               0.87                
            661 FM990                661                 
         661.87 FM990D99             661.87              
            1.5 FM0D9                1.5                 
   .00045354543 FM0D99999999999      0.00045354543       

Điều này phụ thuộc vào chuyển đổi ngầm định nhưng dường như hoạt động cho tích cực, tiêu cực và bằng không. Nó không cần phải cắt bỏ kết quả vì dấu phân tách thập phân D chỉ được bao gồm cho các số không phải là số nguyên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01653:không thể mở rộng bảng trong không gian bảng ORA-06512

  2. 12c DBA_USERS Thay đổi

  3. ORA-21700:đối tượng không tồn tại hoặc được đánh dấu để xóa đối với Mảng liên kết dưới dạng tham số đầu vào được gọi từ ODP.NET

  4. Ví dụ về điều kiện IF trong Oracle

  5. Đếm số hàng đã nối trong phép nối bên trái