在SQL中将9999999999显示为9-999-99999-9

时间:2012-08-19 20:48:55

标签: sql database oracle substr

我正在尝试将VARCHAR格式为9999999999的列显示为9-999-99999-9。 我知道TO_CHAR和TO_NUMBER不会工作,我知道我想用SUBSTR来做这件事。

如果我能够将多个SUBSTR功能组合在一起作为一列,我觉得我可以完成这项工作:

SELECT SUBSTR(列,0,1) - SUBSTR(列,1,3)等,但这也不起作用。

非常感谢任何指导。

6 个答案:

答案 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;