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.