如何确定SQL中的varchar字段是否包含任何数字字符?

Bob*_*mer 13 t-sql sql-server

我正在开发一个项目,我们必须弄清楚某个给定字段是否可能是公司名称而不是地址.

在对它进行非常广泛的扫描时,我们假设如果该字段不包含数字,则可能是名称与街道地址(我们的目标是80%的情况,知道有些人必须手动完成).

所以现在对手头的问题.给定一个表,为了简单起见,单个varchar(100)列,我怎样才能找到那些在字段内任何位置没有数字字符的记录?

例如:

"Main Street, Suite 10A" --Do not return this.
"A++ Billing" --Should be returned
"XYZ Corporation" --Should be returned
"100 First Ave, Apt 20" --Should not be returned
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Stu*_*tLC 35

Sql Server允许在运算符中指定范围的类似regex的语法,[0-9]或者可以与任何字符串通配符()一起使用.例如:[0123456789]LIKE%

select * from Address where StreetAddress not like '%[0-9]%';
Run Code Online (Sandbox Code Playgroud)

意志%开头的通配符like显然会损害性能(可能是扫描),但在你的情况下,这似乎是不可避免的.

另一个MSDN参考.


Sac*_*hag 8

select * from table where column not like '%[0-9]%'
Run Code Online (Sandbox Code Playgroud)

此查询返回表中所有行,其中列不包含0到9之间的任何数字.

  • @Bob - 编辑并验证. (2认同)

DOK*_*DOK 8

我喜欢简单的正则表达式方法,但为了讨论,将提到使用PATINDEX的替代方法.

SELECT InvoiceNumber from Invoices WHERE PATINDEX('%[0-9]%', InvoiceNumber) = 0
Run Code Online (Sandbox Code Playgroud)