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

时间:2010-12-01 13:41:09

标签: sql-server tsql

我正在开展一个项目,我们必须弄清楚某个字段是否可能是公司名称与地址。

在对它进行非常广泛的扫描时,我们假设如果此字段不包含数字,则可能是名称与街道地址(我们的目标是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

提前致谢!

5 个答案:

答案 0 :(得分:34)

Sql Server允许在LIKE operator中指定范围[0-9]或Set [0123456789]的类似regex的语法,该语法可以与任何字符串通配符一起使用({{1 }})。例如:

%

select * from Address where StreetAddress not like '%[0-9]%'; 开头的通配符%显然会影响性能(可能是扫描),但在您的情况下,这似乎是不可避免的。

Another MSDN Reference

答案 1 :(得分:8)

select * from table where column not like '%[0-9]%'

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

答案 2 :(得分:8)

我喜欢简单的正则表达式方法,但为了讨论起见,请提及使用 PATINDEX 的替代方法。

SELECT InvoiceNumber from Invoices WHERE PATINDEX('%[0-9]%', InvoiceNumber) = 0

答案 3 :(得分:3)

此查询列出使用数字字符

创建的表格
select * from SYSOBJECTS where xtype='u' and  name  like '%[0-9]%'

答案 4 :(得分:2)

这对我有用。

select total_employee_count from company_table where total_employee_count  like  '%[^0-9]%' 

这会返回包含非数字值的所有行,包括2-3 ..