2013-04-08 32 views
6

Cần giúp đỡ với số lượng chuyển đổi:ORACLE chuyển đổi số sang chuỗi

select to_char(a, '99D99') 
     , to_char(a, '90D99') 
from 
(
select 50 a from dual 
union 
select 50.57 from dual 
union 
select 5.57 from dual 
union 
select 0.35 from dual 
union 
select 0.4 from dual 

sẽ dẫn đến:

1  ,35 0,35 
2  ,40 0,40 
3  5,57 5,57 
4 50,00 50,00 
5 50,57 50,57 

Nhưng làm thế nào để làm cho đầu ra của tôi như:

  1. 0,35
  2. 0,4
  3. 5,57
  4. 50,57

Tôi cần 0 trước dấu phẩy, nhưng không phải sau.

+1

Bạn có thể sử dụng '90D99', nhưng điều đó sẽ làm cho giá trị thứ hai của bạn là '0,4' thay vì' 0,40'. Tôi không chắc chắn bạn có thể có một mô hình cho phép cả hai '0,40' và' 50'. –

+0

90D99 cho cùng 0,40 với tôi. 0,40 là sai lầm của tôi ... tôi cần 0,4 ofc. – BeHunter

Trả lời

10

Sử dụng FM format model modifier để đến gần, vì bạn sẽ không nhận được số 0 sau dấu thập phân; nhưng bạn vẫn sẽ nhận được dấu phân tách, ví dụ: 50.. Bạn có thể sử dụng rtrim để thoát khỏi rằng:

select to_char(a, '99D90'), 
    to_char(a, '90D90'), 
    to_char(a, 'FM90D99'), 
    rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')) 
from (
    select 50 a from dual 
    union all select 50.57 from dual 
    union all select 5.57 from dual 
    union all select 0.35 from dual 
    union all select 0.4 from dual 
) 
order by a; 

TO_CHA TO_CHA TO_CHA RTRIM(
------ ------ ------ ------ 
    .35 0.35 0.35 0.35 
    .40 0.40 0.4 0.4 
    5.57 5.57 5.57 5.57 
50.00 50.00 50. 50 
50.57 50.57 50.57 50.57 

Lưu ý rằng tôi đang sử dụng to_char(0, 'D') để tạo ra các nhân vật để cắt, để phù hợp với dấu phân cách thập phân - vì vậy nó trông cho nhân vật tương tự, , hoặc ., như đầu tiên to_char thêm.

Nhược điểm nhỏ là bạn mất liên kết. Nếu đây đang được sử dụng ở những nơi khác nó có thể không quan trọng, nhưng nó thì bạn cũng có thể bọc nó trong một lpad, mà bắt đầu để làm cho nó trông một chút phức tạp:

... 
lpad(rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')), 6) 
... 

TO_CHA TO_CHA TO_CHA RTRIM(LPAD(RTRIM(TO_CHAR(A,'FM 
------ ------ ------ ------ ------------------------ 
    .35 0.35 0.35 0.35  0.35 
    .40 0.40 0.4 0.4  0.4 
    5.57 5.57 5.57 5.57  5.57 
50.00 50.00 50. 50   50 
50.57 50.57 50.57 50.57 50.57 
+0

cảm ơn rất nhiều. đó là những gì tôi cần. – BeHunter

+0

rtrim (to_char (a, 'FM90D99'), to_char (0, 'D')) là hoàn hảo cảm ơn bạn! – Patrikoko

0

này nên giải quyết vấn đề của bạn:

select replace(to_char(a, '90D90'),'.00','') 
from 
(
select 50 a from dual 
union 
select 50.57 from dual 
union 
select 5.57 from dual 
union 
select 0.35 from dual 
union 
select 0.4 from dual 
); 

tặng một cái nhìn cũng như SQL Fiddle này để thử nghiệm.

+0

Đó là sai lầm của tôi. tôi cần 0,4. vì vậy chúng tôi có thể sử dụng trim ... nhưng đối với mee nó là quá phức tạp ... rtrim (rtrim (to_char (a, '90D99'), '0'), ',') – BeHunter

Các vấn đề liên quan