搜索具有不同格式的电话号码

时间:2015-06-30 11:33:17

标签: sql sql-server

我们有一个存储电话号码的表格。这些数字存储在VARCHAR(200)中。但是有不同的格式,例如:

040-1551515
(073) 614 53 97
+31884637222

我想搜索此表的非数字剥离字符串。因此,如果我的搜索值为' 0736145397'它会匹配' (073) 614 53 97'。这甚至可能吗?

理想情况下,最好是将它们全部转换为一种格式,但这不会很快发生。

4 个答案:

答案 0 :(得分:0)

虽然不合格,但您可以使用REPLACEWHERE子句中的电话号码列中删除字符,如下所示:

CREATE TABLE #DemoTable (number VARCHAR(200))
INSERT INTO #DemoTable (number) VALUES ('040-1551515'), ('(073) 614 53 97'), ('+31884637222')

SELECT  *
  FROM  #DemoTable
  WHERE (REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(number, '-', ''), '+', ''), ' ', ''), '(', ''), ')', '') = '0736145397')

DROP TABLE #DemoTable

您需要为要删除的每个字符添加新的REPLACE

正如我所说的那样,无助,但如果你只有几个字符来排除这个就行了。

答案 1 :(得分:0)

选择试试此

select phon_no from table
where replace(replace(replace(replace(phone_no,' ',''),'(',''),')',''),'+','')='0736145397'

但是,您可以使用另一个没有格式的电话号码列,以便您可以使用该列进行搜索

答案 2 :(得分:0)

您可以使用replace()来解决问题:

where replace(replace(replace(replace(replace(tnumber, ' ', ''
                                             ), '(', ''
                                     ), ')', ''
                              ), '-', ''
                      ), '+', ''
             ) = '0736145397'

如果您无法更改数据本身,可以考虑将“已清理”的数字添加为计算列。类似的东西:

alter table t add CleanNumber as (
              replace(replace(replace(replace(replace(tnumber, ' ', ''
                                                     ), '(', ''
                                             ), ')', ''
                                      ), '-', ''
                              ), '+', ''
                     ) )

然后查询就是:

where CleanNumber = '0736145397'

答案 3 :(得分:0)

我们可以替换它的功能..

create table phonenumber (number varchar(200))
insert into phonenumber values('123456')
insert into phonenumber values('+555555')
insert into phonenumber values('77(123)989')

select replace(replace(number,'(',''),')','') formatednumber ,* from phonenumber with(nolock)
where replace(replace(number,'(',''),')','') ='77123989'

由于