2016-07-26 65 views
0

所以我在我的表LOCMEMBERS中有一个EMAILADDRESS VARCHAR2字段。有些电子邮件地址以10位数的电话号码开头,我试图找出那些有用的电话号码。所以我正在寻找一种方法来标记[email protected]但不是[email protected]用SQL试图识别以10位开头的行

这是一个Oracle数据库。

我尝试以下,但SUBSTRING抛出一个错误 “无效的标识符”:

SELECT SUBSTRING(CAST(EMAILADDRESS AS VARCHAR(20)), 1, 10),   
FROM LOCMEMBERS 
+1

你尝试搜索'甲骨文substring'? –

+4

'WHERE REGEXP_LIKE(EMAILADDRESS,'^ [[:digit:]] {10}')' –

+0

如果'EMAILADDRESS'已经是'varchar',那么将它投射到一个 –

回答

1

试试这个

WITH 
locmembers(member_id, email_address) AS 
(SELECT 1,'[email protected]' FROM dual UNION ALL --numbers but < 10 digits 
    SELECT 2,'[email protected]' FROM dual UNION ALL --numbers = 10 digits 
    SELECT 3,'[email protected]' FROM dual UNION ALL --numbers > 10 digits 
    SELECT 4,'[email protected]' FROM dual UNION ALL 
    SELECT 5,'[email protected]' FROM dual --email address with 10 digits 
) 
SELECT 
member_id 
,email_address 
,SUBSTR(REGEXP_REPLACE(email_address, '^[[:digit:]]{10}'),1,1) 
FROM 
locmembers 
WHERE SUBSTR(REGEXP_REPLACE(email_address, '^[[:digit:]]{10}'),1,1) = '@' 
; 
+0

@Alex K. - 我更新我的回答将您清洁的方式使用REGEXP –

+0

致谢,得到它具有这方面的工作:SELECT member_id ,EMAIL_ADDRESS FROM locmembers WHERE SUBSTR(REGEXP_REPLACE(EMAIL_ADDRESS, '^ [[:数字:]] {10}') ,1,1)='@' –