ORACLE 将数字转换为字符串
Posted
技术标签:
【中文标题】ORACLE 将数字转换为字符串【英文标题】:ORACLE convert number to string 【发布时间】:2013-04-08 09:27:06 【问题描述】:在转换数字方面需要一些帮助:
select to_char(a, '99D99')
, to_char(a, '90D99')
from
(
select 50 a from dual
union
select 50.57 from dual
union
select 5.57 from dual
union
select 0.35 from dual
union
select 0.4 from dual
将导致:
1 ,35 0,35
2 ,40 0,40
3 5,57 5,57
4 50,00 50,00
5 50,57 50,57
但是如何使我的输出如下:
-
0,35
0,4
5,57
50
50,57
我在逗号之前需要0
,但之后不需要。
【问题讨论】:
您可以使用90D99
,但这会使您的第二个值成为0,4
,而不是0,40
。我不确定您是否可以拥有一种同时允许0,40
和50
的模型。
90D99 给我同样的 0.40。 0.40 是我的错误...我需要 0.4 ofc。
【参考方案1】:
使用FM
format model modifier 接近,因为您不会得到小数点分隔符后的尾随零;但你仍然会得到分隔符本身,例如50.
。你可以使用rtrim
来摆脱它:
select to_char(a, '99D90'),
to_char(a, '90D90'),
to_char(a, 'FM90D99'),
rtrim(to_char(a, 'FM90D99'), to_char(0, 'D'))
from (
select 50 a from dual
union all select 50.57 from dual
union all select 5.57 from dual
union all select 0.35 from dual
union all select 0.4 from dual
)
order by a;
TO_CHA TO_CHA TO_CHA RTRIM(
------ ------ ------ ------
.35 0.35 0.35 0.35
.40 0.40 0.4 0.4
5.57 5.57 5.57 5.57
50.00 50.00 50. 50
50.57 50.57 50.57 50.57
请注意,我使用 to_char(0, 'D')
生成要修剪的字符,以匹配小数分隔符 - 因此它会查找相同的字符,,
或 .
,作为第一个 to_char
添加。
轻微的缺点是你失去了对齐。如果在其他地方使用它可能没关系,但它确实如此,那么你也可以将它包装在 lpad
中,这开始让它看起来有点复杂:
...
lpad(rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')), 6)
...
TO_CHA TO_CHA TO_CHA RTRIM( LPAD(RTRIM(TO_CHAR(A,'FM
------ ------ ------ ------ ------------------------
.35 0.35 0.35 0.35 0.35
.40 0.40 0.4 0.4 0.4
5.57 5.57 5.57 5.57 5.57
50.00 50.00 50. 50 50
50.57 50.57 50.57 50.57 50.57
【讨论】:
rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')) 非常完美,谢谢!【参考方案2】:这应该可以解决您的问题:
select replace(to_char(a, '90D90'),'.00','')
from
(
select 50 a from dual
union
select 50.57 from dual
union
select 5.57 from dual
union
select 0.35 from dual
union
select 0.4 from dual
);
也可以看看这个SQL Fiddle 进行测试。
【讨论】:
这是我的错误。我需要0.4。所以我们可以使用 trim...但是对于 mee 它太复杂了...rtrim(rtrim(to_char(a, '90D99'), '0'), ',')以上是关于ORACLE 将数字转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章