我正在尝试将VARCHAR格式为9999999999的列显示为9-999-99999-9。 我知道TO_CHAR和TO_NUMBER不会工作,我知道我想用SUBSTR来做这件事。
如果我能够将多个SUBSTR功能组合在一起作为一列,我觉得我可以完成这项工作:
SELECT SUBSTR(列,0,1) - SUBSTR(列,1,3)等,但这也不起作用。
非常感谢任何指导。
答案 0 :(得分:6)
您可以使用正则表达式搜索并替换
select regexp_replace('9999999999','(.)(...)(.....)(.)','\1-\2-\3-\4') from dual;
答案 1 :(得分:4)
您应该能够使用SUBSTR
函数和Oracle字符串连接运算符||
的组合。
SELECT SUBSTR(column, 1, 1)
|| '-'
|| SUBSTR(column, 2, 3)
|| '-'
|| SUBSTR(column, 4, 5)
|| '-'
|| SUBSTR(column, 9, 1)
答案 2 :(得分:3)
我认为使用to_char
实际上是最佳选择。它只需要明智地使用format models。
这应该这样做,但允许您非常轻松地扩展,而无需每次都创建新的查询。
select replace(to_char( 999999999,'9,99,99999,9'),',','-') from dual
我创建了一个小SQL Fiddle来演示。
答案 3 :(得分:2)
通过摆弄NLS数字字符设置,您可以采用另一种方式:
select to_char(9999999999, 'fm9g999g99999g9', 'NLS_NUMERIC_CHARACTERS=''.-''')
from dual;
9-999-99999-9
答案 4 :(得分:0)
SELECT SUBSTR(9999999999,1,1) ||
'-' ||
SUBSTR(9999999999,2,3) ||
'-' ||
SUBSTR(9999999999,4,5) ||
'-' ||
SUBSTR(9999999999,10,1) FROM DUAL;
答案 5 :(得分:-1)
假设地址表中有电话号码字段:
以(999)999-9999格式显示日期的查询如下:
select concat(concat('(',substr(phone,1,3),')'),substr(phone,4,3),'-',substr(phone,7,4))
as Phone from address;