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