[英]Oracle SQL query to find special characters for phone numbers
我正在嘗試編寫一個查詢來查找電話號碼的特殊字符。
預計電話號碼是: 2047653894
實際: 204765389(4
, 204-7653894
, -2047653894
, (204)7653894
, 20476+53894
, ....
注意:我只想查找帶有特殊字符的電話號碼。 我不想替換特殊字符。
另一種選擇是刪除所有非數字(在這里,我住的地方,電話號碼只是數字;我不是在談論電話號碼可能具有的各種格式):
SQL> with test (col) as
2 (select '204765389(4' from dual union all
3 select '204-7653894' from dual union all
4 select '-2047653894' from dual union all
5 select '(204)7653894' from dual union all
6 select '20476+53894' from dual
7 )
8 select
9 col,
10 regexp_replace(col, '\D') result
11 from test;
COL RESULT
------------ ------------------------------------------------
204765389(4 2047653894
204-7653894 2047653894
-2047653894 2047653894
(204)7653894 2047653894
20476+53894 2047653894
SQL>
[編輯]
如果您只想查找不包含數字的電話號碼,請使用regexp_like
:
SQL> with test (col) as
2 (select '204765389(4' from dual union all
3 select '204-7653894' from dual union all
4 select '-2047653894' from dual union all
5 select '(204)7653894' from dual union all
6 select '20476+53894' from dual union all
7 select '2047653897' from dual
8 )
9 select col
10 from test
11 where regexp_like(col, '\D');
COL
------------
204765389(4
204-7653894
-2047653894
(204)7653894
20476+53894
SQL>
您可以將[[:punct:]]
posix 與REGEXP_REPLACE()
一起使用,例如
SELECT REGEXP_REPLACE(col,'[[:punct:]]') AS col
FROM t
假設每個逗號分隔值代表表中的一個列值
雖然您可以使用正則表達式,但它們很慢,使用簡單的字符串函數並使用TRANSLATE
查找所有非數字字符然后替換它們可能會更快:
SELECT TRANSLATE(
phone_number,
'0' || TRANSLATE(phone_number, 'x0123456789', 'x')
'0'
) AS simplified_phone_number
FROM table_name;
其中,對於您的示例數據:
CREATE TABLE table_name (phone_number) AS
SELECT '204765389(4' FROM DUAL UNION ALL
SELECT '204-7653894' FROM DUAL UNION ALL
SELECT '-2047653894' FROM DUAL UNION ALL
SELECT '(204)7653894' FROM DUAL UNION ALL
SELECT '20476+53894' FROM DUAL;
輸出:
SIMPLIFIED_PHONE_NUMBER |
---|
2047653894 |
2047653894 |
2047653894 |
2047653894 |
2047653894 |
如果你想列出非數字字符的電話號碼,那么你也可以使用TRANSLATE
刪除數字並檢查是否有任何其他字符:
SELECT *
FROM table_name
WHERE TRANSLATE(phone_number, 'x0123456789', 'x') IS NOT NULL
您還可以使用REGEXP_LIKE
檢查字符串是否不完全是數字:
SELECT *
FROM table_name
WHERE NOT REGEXP_LIKE(phone_number, '^\d+$')
或者有非數字:
SELECT *
FROM table_name
WHERE REGEXP_LIKE(phone_number, '\D')
但是,正則表達式可能會比簡單的字符串函數(如TRANSLATE
)慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.