【问题标题】:How would I determine if a varchar field in SQL contains any numeric characters?如何确定 SQL 中的 varchar 字段是否包含任何数字字符?
【发布时间】:2011-05-18 12:24:19
【问题描述】:

我正在开展一个项目,我们必须确定给定字段是否可能是公司名称而不是地址。

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

提前致谢!

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    Sql Server 允许在 LIKE operator 中指定范围 [0-9] 或 Set [0123456789] 的类似正则表达式的语法,它可以与任何字符串通配符 (%) 一起使用。例如:

    select * from Address where StreetAddress not like '%[0-9]%';
    

    like 开头的通配符 % 显然会影响性能(可能会扫描),但在您的情况下,这似乎是不可避免的。

    Another MSDN Reference.

    【讨论】:

      【解决方案2】:
      select * from table where column not like '%[0-9]%'
      

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

      【讨论】:

      • 无效 - 上面的查询包括除空或空白之外的所有记录。
      【解决方案3】:

      我喜欢简单的正则表达式方法,但为了便于讨论,我会提到这种使用 PATINDEX 的替代方法。

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

      【讨论】:

        【解决方案4】:

        此查询列出使用数字字符创建的表

        select * from SYSOBJECTS where xtype='u' and  name  like '%[0-9]%'
        

        【讨论】:

          【解决方案5】:

          这对我有用。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-25
            • 2012-01-05
            • 1970-01-01
            • 2019-06-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多