oraclesqlsubstr函数i

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

我正在使用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 = 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;