我正试图解决这个问题。 这个sql
select t.currency || ' ' || abs(t.price)
from apple_month t
where t.price <= 1
(t.price是浮动)
返回如下数字:
EUR ,97
USD ,87
小数点前没有零位数。有什么问题?
答案 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
前导零:
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 |