我正在跟踪上一篇成功生成Oracle SELECT
语句的文章。从先前的脚本中,我现在需要
,但是我尝试使用TO_CHAR
,CONCAT
(或||
尝试同时进行串联)和FM
在同一行中导致无效数字或无效的运算符错误(取决于我如何重新排列行中的元素)令人痛苦地提醒我,我的基本脚本几乎不了解正确的用法和语法。
TO_CHAR
和CONCAT
(||
)的组合成功生成了一个9位数的字符串,但是我试图从格式为XXX-XXX-XXXX的结果中获得接下来的内容(我已经从原始脚本中删除了与该特定问题无关的数据元素的行;原始查询中没有嵌套任何内容,它只选择了几个字段,并有一系列左联接连接到一个通用UID字段,不同的表)
select distinct
cn.dflt_id StudentIdNumber,
to_char (p.area_code || p.phone_no) Phone,
from
co_name cn
left join co_v_name_phone1 p on cn.name_id = p.name_id
order by cn.dflt_id
在获得的“电话”列中,是否有人会提供有用的建议以实现所需的XXX-XXX-XXXX格式?到目前为止,我对'fm999g999g9999'变体的尝试均未成功。
谢谢
斯科特
答案 0 :(得分:0)
以下是我想到的一些选择;看一看,选择最合适的那个。如果仍然有问题,请发布自己的测试用例。
-
{3}
个字符,第二个具有{4}
个字符顺便说一句,区号真的是数字吗?没有前导零?
SQL> with test (area_code, phone_number) as
2 (select 123, 9884556 from dual union
3 select 324, 1254789 from dual
4 )
5 select
6 to_char(area_code) || to_char(phone_number) l_concat,
7 --
8 substr(to_char(area_code) || to_char(phone_number), 1, 3) ||'-'||
9 substr(to_char(area_code) || to_char(phone_number), 4, 3) ||'-'||
10 substr(to_char(area_code) || to_char(phone_number), 7)
11 res2,
12 --
13 to_char(to_char(area_code) || to_char(phone_number),
14 '000g000g0000', 'nls_numeric_characters=.-') res3,
15 --
16 to_char(area_code) ||'-'||
17 regexp_replace(to_char(phone_number), '(\d{3})(\d{4})', '\1-\2') res4
18 from test;
L_CONCAT RES2 RES3 RES4
------------- ------------- ------------- -------------
1239884556 123-988-4556 123-988-4556 123-988-4556
3241254789 324-125-4789 324-125-4789 324-125-4789
SQL>