我们有一个存储电话号码的表格。这些数字存储在VARCHAR(200)
中。但是有不同的格式,例如:
040-1551515
(073) 614 53 97
+31884637222
我想搜索此表的非数字剥离字符串。因此,如果我的搜索值为' 0736145397
'它会匹配' (073) 614 53 97
'。这甚至可能吗?
理想情况下,最好是将它们全部转换为一种格式,但这不会很快发生。
答案 0 :(得分:0)
虽然不合格,但您可以使用REPLACE
从WHERE
子句中的电话号码列中删除字符,如下所示:
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'
由于