1

我正在尝试将 VARCHAR 格式 9999999999 的列显示为 9-999-99999-9。我知道 TO_CHAR 和 TO_NUMBER 不起作用,我知道我想使用 SUBSTR 来做到这一点。

如果我能够将多个 SUBSTR 函数作为一列一起使用,我觉得我可以完成这项工作,例如:

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

非常感谢任何指导。

4

6 回答 6

6

您可以使用正则表达式搜索和替换

select regexp_replace('9999999999','(.)(...)(.....)(.)','\1-\2-\3-\4') from dual;
于 2012-08-19T21:04:57.417 回答
4

您应该能够结合使用该SUBSTR函数和 Oracle 字符串连接运算符||.

SELECT    SUBSTR(column, 1, 1)
          || '-'
          || SUBSTR(column, 2, 3)
          || '-'
          || SUBSTR(column, 4, 5)
          || '-'
          || SUBSTR(column, 9, 1)
于 2012-08-19T20:57:21.533 回答
3

我认为使用to_char实际上是最好的选择。它只需要明智地使用格式模型

这应该可以做到,但允许您非常轻松地扩展,而不必每次都创建新查询。

select replace(to_char( 999999999,'9,99,99999,9'),',','-') from dual

我创建了一个小SQL Fiddle来演示。

于 2012-08-19T21:37:21.210 回答
2

通过摆弄 NLS 数字字符设置,您可以通过另一种方式做到这一点:

select to_char(9999999999, 'fm9g999g99999g9', 'NLS_NUMERIC_CHARACTERS=''.-''')
from dual;

9-999-99999-9
于 2012-08-21T07:32:37.173 回答
0
SELECT SUBSTR(9999999999,1,1) || 
       '-' ||
       SUBSTR(9999999999,2,3) ||
       '-' ||
       SUBSTR(9999999999,4,5) ||
       '-' ||
       SUBSTR(9999999999,10,1) FROM DUAL;
于 2012-08-20T07:24:44.383 回答
-1

假设地址表中有Phonenumber字段:
查询以(999)999-9999格式显示日期如下:

select concat(concat('(',substr(phone,1,3),')'),substr(phone,4,3),'-',substr(phone,7,4))
as Phone from address;
于 2018-12-06T07:53:45.383 回答