首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用正则表达式进行SQL Server查询?

使用正则表达式进行SQL Server查询?
EN

Stack Overflow用户
提问于 2011-05-18 03:39:12
回答 5查看 3K关注 0票数 6

我在SQL Server数据库中有一个varchar字段,它以许多不同的方式存储电话号码,但它们本质上都是电话号码。

示例:

代码语言:javascript
复制
8181234564
(818) 123 4564
818 - 123 - 4567

我希望我可以使用regex去掉所有非数字字符,然后在..上执行like或"=“我可以这样做吗?

忘了提一下:我只有读访问权。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-18 03:52:19

如果您知道该字段包含某种有效形式的电话号码,那么下面这个非常难看的LIKE用法将会匹配一个特定的号码。要查找818-123-4567:

代码语言:javascript
复制
select * from thetable where phonenum like ('%8%1%8%1%2%3%4%5%6%7%')

当然,这也将匹配无效条目(例如,具有额外数字、字符等的数字)。而且它可能是一个不能使用任何索引的相当昂贵的查询。

更现实的版本可能是这样的:

代码语言:javascript
复制
select * from thetable where phonenum like ('%818%123%4567%')
票数 1
EN

Stack Overflow用户

发布于 2011-05-18 04:28:55

如果你只有读访问权限,你可能也不能创建函数。

如果你能创建一个函数,你可以使用一些现有的解决方案。如果不是,这是丑陋的,但它可以用于您的示例:

代码语言:javascript
复制
declare @string varchar(50)
set @string = '(818) 123 -  4564'

select replace(replace(replace(replace(@string,'(',''),' ',''),')',''),'-','')
票数 2
EN

Stack Overflow用户

发布于 2011-05-18 03:42:19

这里有一个类似的问题,它有你的答案:

How to strip all non-alphabetic characters from string in SQL Server?

其中一个答案展示了如何从字符串中剥离除数字以外的所有内容。基本上,您将创建一个UDF并使用regex清除非数字字符。然后你可以做你的比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6036191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档