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

Oracle - Tại sao số 0 đứng đầu của một số biến mất khi chuyển đổi nó thành TO_CHAR

Tôi đang tìm cách để định dạng số mà không có khoảng trắng, dấu chấm, số 0 ở đầu hoặc cuối (ngoại trừ một số 0 đứng đầu cho các số nhỏ hơn 1 nên có).

Điều này thật khó chịu khi không thể dễ dàng đạt được định dạng thông thường như vậy trong Oracle.

Ngay cả Tom Kyte cũng chỉ đề xuất cách giải quyết phức tạp dài như thế này:

case when trunc(x)=x
    then to_char(x, 'FM999999999999999999')
    else to_char(x, 'FM999999999999999.99')
end x

Nhưng tôi đã có thể tìm thấy giải pháp ngắn hơn chỉ đề cập đến giá trị một lần:

rtrim(to_char(x, 'FM999999999999990.99'), '.')

Điều này hoạt động như mong đợi cho tất cả các giá trị có thể có:

select 
    to_char(num, 'FM99.99') wrong_leading_period,
    to_char(num, 'FM90.99') wrong_trailing_period,
    rtrim(to_char(num, 'FM90.99'), '.') correct
from (
  select num from (select 0.25 c1, 0.1 c2, 1.2 c3, 13 c4, -70 c5 from dual)
  unpivot (num for dummy in (c1, c2, c3, c4, c5))
) sampledata;

    | WRONG_LEADING_PERIOD | WRONG_TRAILING_PERIOD | CORRECT |
    |----------------------|-----------------------|---------|
    |                  .25 |                  0.25 |    0.25 |
    |                   .1 |                   0.1 |     0.1 |
    |                  1.2 |                   1.2 |     1.2 |
    |                  13. |                   13. |      13 |
    |                 -70. |                  -70. |     -70 |

Vẫn đang tìm kiếm giải pháp ngắn hơn.

Có một trình duyệt rút gọn với chức năng trợ giúp tùy chỉnh:

create or replace function str(num in number) return varchar2
as
begin
    return rtrim(to_char(num, 'FM999999999999990.99'), '.');
end;

Nhưng các hàm pl / sql tùy chỉnh có chi phí hiệu suất đáng kể không phù hợp với các truy vấn nặng.



  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-00907:thiếu dấu ngoặc đơn bên phải

  2. Dữ liệu lớn SQL của Oracle

  3. Chế độ xem logic của mô hình dữ liệu trong R12.2

  4. Làm thế nào để chèn / cập nhật kích thước lớn hơn của dữ liệu trong bảng Oracle?

  5. Các lựa chọn thay thế cho LIMIT và OFFSET để phân trang trong Oracle