我试图解决这个问题。 此SQL小数点前无零点
select t.currency || ' ' || abs(t.price)
from apple_month t
where t.price <= 1
(t.price是float)
返回号码这样的:
EUR ,97
USD ,87
有小数点之前没有零位。哪里不对?
我试图解决这个问题。 此SQL小数点前无零点
select t.currency || ' ' || abs(t.price)
from apple_month t
where t.price <= 1
(t.price是float)
返回号码这样的:
EUR ,97
USD ,87
有小数点之前没有零位。哪里不对?
符号||连接字符串。在
t.currency || ' ' || abs(t.price)
因此你依靠abs(t.price)
到字符串的隐式转换。这将值0.97转换为',97'。
使用TO_CHAR
来明确地设置您的号码的格式。例如。
t.currency || ' ' || to_char(abs(t.price), 'fm9999990d00')
它可以工作,但对于整数为0我希望返回0而不是0.00 –
好吧,我以为你想要逗号后有两位数字的所有数字。如果没有,然后使用9s。由于没有可选小数点分隔符的格式,所以您甚至必须修剪它们:'rtrim(to_char(abs(t.price),'fm9999990d99'),'。,')'。或者使用'CASE'来检查你是否有整数或小数。 –
如果要在小数点前加上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
与TO_CHAR
在number format前导零:
的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
| COST |
|-----------|
| EUR 0.97 |
| USD 0.87 |
| USD 0 |
| EUR 0.10 |
| EUR 10 |
| USD 12.34 |
它的工作原理,但我不想.oo后0.当价格是0我想要0,而不是0.00 –
@StefanoCarboni更新 – MT0
你可以使用'to_char'格式化由ABS – SomeJavaGuy
我试图返回的数字。它不起作用 –
plz共享所有三列的数据类型 –