我在SQL Server数据库中有一个varchar字段,它以许多不同的方式存储电话号码,但它们本质上都是电话号码。
示例:
8181234564
(818) 123 4564
818 - 123 - 4567我希望我可以使用regex去掉所有非数字字符,然后在..上执行like或"=“我可以这样做吗?
忘了提一下:我只有读访问权。
发布于 2011-05-18 03:52:19
如果您知道该字段包含某种有效形式的电话号码,那么下面这个非常难看的LIKE用法将会匹配一个特定的号码。要查找818-123-4567:
select * from thetable where phonenum like ('%8%1%8%1%2%3%4%5%6%7%')当然,这也将匹配无效条目(例如,具有额外数字、字符等的数字)。而且它可能是一个不能使用任何索引的相当昂贵的查询。
更现实的版本可能是这样的:
select * from thetable where phonenum like ('%818%123%4567%')发布于 2011-05-18 04:28:55
如果你只有读访问权限,你可能也不能创建函数。
如果你能创建一个函数,你可以使用一些现有的解决方案。如果不是,这是丑陋的,但它可以用于您的示例:
declare @string varchar(50)
set @string = '(818) 123 - 4564'
select replace(replace(replace(replace(@string,'(',''),' ',''),')',''),'-','')发布于 2011-05-18 03:42:19
这里有一个类似的问题,它有你的答案:
How to strip all non-alphabetic characters from string in SQL Server?
其中一个答案展示了如何从字符串中剥离除数字以外的所有内容。基本上,您将创建一个UDF并使用regex清除非数字字符。然后你可以做你的比较。
https://stackoverflow.com/questions/6036191
复制相似问题