如何将零加到数字上以及格式化它

时间:2012-05-09 11:46:21

标签: sql oracle

我有一个表node_id为数字的表,其中,

node_id
0
2000
300300300
400400400

我想要得到的是将此数字转换为字符串,并在右起每三位数后添加“ - ”。 所以期望的产出是,

node_id
000-000-000
000-002-000
300-300-300
400-400-400

这是我正在使用的查询,

select TO_CHAR( lpad(t1.node_id,9,'0'), '999G999G999', 'NLS_NUMERIC_CHARACTERS="-"'), node_id from table t1;

我得到的输出是,

node_id
0
2-000
300-300-300
400-400-400

我的问题是我还需要在每条记录前加上'0',使总长度为11。 我尝试在lpad周围立即添加to_char,以便将lpad输出转换为varchar,但这也提供了相同的输出。

2 个答案:

答案 0 :(得分:3)

只需将格式掩码更改为:

'099G999G999'

(注意前导'0')

答案 1 :(得分:0)

在任何数据库中使用前置0的替代方法如下:

right('000000000000' || cast(<val> to varchar(100)), <numdigits>)

当然,有些数据库使用“concat()”或“+”而不是“||”连接。