十进制前没有零

时间:2015-09-23 10:23:07

标签: sql oracle

我正试图解决这个问题。 这个sql

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

(t.price是浮动)

返回如下数字:

EUR ,97
USD ,87

小数点前没有零位数。有什么问题?

3 个答案:

答案 0 :(得分:2)

符号||连接字符串。在

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

因此你依赖abs(t.price)到字符串的隐式转换。这会将值0.97转换为&#39;,97&#39;。

使用TO_CHAR明确格式化您的号码。 E.g。

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

答案 1 :(得分: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

答案 2 :(得分:0)

number format中使用TO_CHAR前导零:

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 |