2016-02-18 15 views
2

我目前正試圖迫使一些有兩位小數字符在輸出無需圓形, 如果有一個十進制值存在我只需要有2位小數如何使用Oracle SQL上的雙表返回帶小數點的期望值?

例子:

26將返回26.00

26.1將返回26.10

26.20將返回26.20

26.09090909將返回26.09

26.23090909將返回26.23

0.14000將返回0.14

0.04000將返回0.04

0將返回0.00

但我目前使用具有在內部語言非常有限的功能做到這一點(可能,但需要很多線路)。 但我能夠對Oracle SQL進行查詢。現在我想問一下是否可以使用SQL上的雙重表進行查詢。 我的計劃是將值傳遞給變量,該變量將用於我的SQL命令,SQL將返回我的期望值。

在此先感謝。

回答

0

你可以嘗試這樣的:

SELECT TO_CHAR(26, '99.99') AS X FROM DUAL 

對於在其中需要有0明確的數字小於1,你必須提供像

SELECT TO_CHAR(0.14000,'0.99') FROM DUAL; 

所以你可以使用它像

CASE WHEN myNum > 0 and myNum < 1 
then TO_CHAR(myNum,'0.99') else 
TO_CHAR(myNum, '99.99') 

或更簡化(如評論中建議的):

select to_char(num, 'fm9999999990.00') from dual 
+0

感謝您的迴應,它的工作原理正確與整個數字,但與像0.14000的值,則省略零返回。」 14" –

+0

@ VIC-rattlehead: - 更新我的回答! –

+1

您不需要case語句。在格式掩碼中使用0將始終使值顯示即使爲零,而9將只顯示一個值,如果它不爲零。因此,通過使用'fm90.00'的格式掩碼,您將確保指定了所有必要的數字(但不包括額外的空格),只要該數字小於100且大於-100。在格式掩碼的前面添加更多9,以迎合更大的數字。 – Boneist

2

您只需格式掩碼:

select to_char(yourVariable, 'fm9999999990.00') from dual 

根據Boneist的建議下,在格式掩碼「FM」防止空白的創作,而「0」的數字是永遠寫數字有用:

with test(num) as 
(
select 26 from dual union all 
select 26.1 from dual union all 
select 26.20 from dual union all 
select 26.09090909 from dual union all 
select 26.23090909 from dual union all 
select 0.14000 from dual union all 
select 0.04000 from dual union all 
select 0 from dual 
) 
select num, to_char(num, 'fm9999999990.00') 
from test 
+4

你不需要'ltrim'; Oracle提供了一種將它作爲格式掩碼的一部分的方法,例如:'to_char(num,'fm9999999990.00')' – Boneist