oraclesqlsubstr函数i
我正在使用Oracle sql。删除任何特殊字符后,我正在尝试查找t2.WORK_手机。然后我想对它执行substr函数,这样它只会从第一个位置开始获取前10个数字。下面的操作是正确的,但如何将substr函数应用于它oraclesqlsubstr函数i,sql,oracle,Sql,Oracle,我正在使用Oracle sql。删除任何特殊字符后,我正在尝试查找t2.WORK_手机。然后我想对它执行substr函数,这样它只会从第一个位置开始获取前10个数字。下面的操作是正确的,但如何将substr函数应用于它 , PHONE_NUMBER = NVL((SELECT regexp_replace(t2.WORK_PHONE, '[^0-9]*', '') phone_number FROM PS_EMPLOYEES t2 WHERE t2.EMPLID = P
, PHONE_NUMBER =
NVL((SELECT regexp_replace(t2.WORK_PHONE, '[^0-9]*', '') phone_number
FROM PS_EMPLOYEES t2
WHERE t2.EMPLID = PS_Z_EXS_EMP_TBL_T.EMPLID
), ' ')
只需将NVL的结果连同索引和长度参数一起传递给SUBSTR函数,如下所示:
, PHONE_NUMBER = SUBSTR
(
NVL((SELECT regexp_replace(t2.WORK_PHONE, '[^0-9]*', '') phone_number
FROM PS_EMPLOYEES t2
WHERE t2.EMPLID = PS_Z_EXS_EMP_TBL_T.EMPLID), ' ')
,1
,10
)
下面的查询应该适合您:假设所有字符串长度至少为10个字符
SELECT
SUBSTR
(
NVL -- If value returned is null, then replace with 0
(
(SELECT REGEXP_REPLACE(t2.WORK_PHONE, '[^0-9]*', '') FROM REST_OF_QUERY),
'0'
),
1, -- From 1st character
10 -- Till 10th Character
) AS PHONE_NUMBER FROM DUAL;
考虑将最后10个值作为电话号码,因为用户可以在电话号码中键入国家代码。
例如,如果手机号码是0000000000,而国家代码是99,那么您的手机号码将是9900000000,这实际上是错误的。如果您在设计中处理过它,那么忽略它。
要获取不确定字符串长度的最后10位数字,可以使用:
SELECT
SUBSTR(
PHONE_NUMBER , GREATEST (-10, -length(TO_CHAR(PHONE_NUMBER ))),10) FROM MY_TABLE;