2015-09-23 55 views
1

我试图解决这个问题。 此SQL小数点前无零点

select t.currency || ' ' || abs(t.price) 
from apple_month t 
where t.price <= 1 

(t.price是float)

返回号码这样的:

EUR ,97 
USD ,87 

有小数点之前没有零位。哪里不对?

+0

你可以使用'to_char'格式化由ABS – SomeJavaGuy

+0

我试图返回的数字。它不起作用 –

+0

plz共享所有三列的数据类型 –

回答

2

符号||连接字符串。在

t.currency || ' ' || abs(t.price) 

因此你依靠abs(t.price)到字符串的隐式转换。这将值0.97转换为',97'。

使用TO_CHAR来明确地设置您的号码的格式。例如。

t.currency || ' ' || to_char(abs(t.price), 'fm9999990d00') 
+0

它可以工作,但对于整数为0我希望返回0而不是0.00 –

+0

好吧,我以为你想要逗号后有两位数字的所有数字。如果没有,然后使用9s。由于没有可选小数点分隔符的格式,所以您甚至必须修剪它们:'rtrim(to_char(abs(t.price),'fm9999990d99'),'。,')'。或者使用'CASE'来检查你是否有整数或小数。 –

1

如果要在小数点前加上zero如果该值小于1那么,
试试;

select t.currency || 
    case when abs(t.price) < 1 then ' 0' || abs(t.price) 
    else ' ' || abs(t.price) end 
from apple_month t 
where t.prezzo <= 1 
0
使用

TO_CHARnumber format前导零:

SQL Fiddle

的Oracle 11g R2架构设置

CREATE TABLE APPLE_MONTH(CURRENCY, PRICE, PREZZO) AS 
      SELECT 'EUR', 0.97, 1 FROM DUAL 
UNION ALL SELECT 'USD', 0.87, 1 FROM DUAL 
UNION ALL SELECT 'USD', 0, 1 FROM DUAL 
UNION ALL SELECT 'EUR', -0.1, 1 FROM DUAL 
UNION ALL SELECT 'EUR', 10, 1 FROM DUAL 
UNION ALL SELECT 'USD', -12.34, 1 FROM DUAL; 

查询1

SELECT CASE WHEN TRUNC(price) = price 
      THEN currency || ' ' || TRIM(TO_CHAR(abs(price), '9999990')) 
      ELSE currency || ' ' || TRIM(TO_CHAR(abs(price), '9999990d00')) 
      END AS COST 
FROM apple_month 
WHERE prezzo <= 1 

Results

|  COST | 
|-----------| 
| EUR 0.97 | 
| USD 0.87 | 
|  USD 0 | 
| EUR 0.10 | 
| EUR 10 | 
| USD 12.34 | 
+0

它的工作原理,但我不想.oo后0.当价格是0我想要0,而不是0.00 –

+0

@StefanoCarboni更新 – MT0