Sql 如何在设置数字格式的同时将零前置为数字
我有一个表,列node_id作为编号,其中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
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()”或“+”而不是“| |”进行连接