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,4050 的模型。 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 将数字转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

oracle 将字符型转换为数值型

在sql中如何将字符串数字转换成数字?

sql怎么把字符串转换为数字?

oracle sql字符串转数字问题

Oracle - 为啥将数字转换为 TO_CHAR 时数字的前导零会消失

sql中如何把字符串转换为数字