Sql 如何在设置数字格式的同时将零前置为数字

Sql 如何在设置数字格式的同时将零前置为数字,sql,oracle,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作为编号,其中

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周围立即添加到_char,以便将lpad输出转换为varchar,但这也会产生相同的输出。

只需将格式掩码更改为:

'099G999G999'

(注意前导的“0”)

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

right('000000000000' || cast(<val> to varchar(100)), <numdigits>)
right('000000000000'| |强制转换(到varchar(100)),)
当然,有些数据库使用“concat()”或“+”而不是“| |”进行连接