【问题标题】:Create SQL 'LIKE' Statment that looks for specific Patterns of numbers and letters创建查找特定数字和字母模式的 SQL 'LIKE' 语句
【发布时间】:2011-03-04 13:03:21
【问题描述】:

是否可以在 SQL 查询中使用 LIKE 来查找数字和字母的模式。我需要找到特定字段数据具有模式的所有记录(2 个数字,1 个连字符,3 个字母)## - AAA 我在 SQL Server 2008 中使用 SSMS。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 我认为你需要正则表达式。 Oracle 有一个REGEXP_LIKE 函数,就像使用LIKE 一样,但带有一个正则表达式。不幸的是,我认为 MS SQL Server 没有任何类似的功能,所以我认为您可能需要编写一个程序来提供帮助。

标签: sql sql-server sql-server-2008 sql-like


【解决方案1】:

我认为LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%' 应该可以工作。

我不确定您的区分大小写的要求,但您可以按如下方式粘贴 COLLATE。

select * from
(
SELECT 'GHSASKJK' AS T UNION ALL
SELECT 'HGGH11-ABC'  UNION ALL
SELECT 'HGGH11-abc' 
) f
WHERE T LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%' COLLATE Latin1_General_CS_AS

【讨论】:

  • 完美。这种情况不区分大小写,但我感谢这些信息以供将来使用。谢谢。
【解决方案2】:

您也应该能够使用PATINDEX 完成此操作。

Select *
From Table
Where PatIndex( '%[0-9][0-9]-[A-Z][A-Z][A-Z]%', Value) > 0

【讨论】:

  • 为什么是PATINDEX 而不是LIKE?恕我直言,使用LIKE 更具可读性。
  • @Ruben - 它是同一问题的替代非 CLR 解决方案。
  • 我之前没见过PatIndex。感谢您扩展我的知识
【解决方案3】:

如果数据正好是“##-AAA”,您可以使用LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]'。如果数据在某处包含此序列,请使用LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%'

请注意,如果您的列被索引,LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]' 可能比任何 UFD 或 CLR 正则表达式快很多,因为 SQL Server 更好地理解 LIKE,并且它可以更轻松地跳过部分索引,如果它永远不会匹配。例如,以 0-9 之外的字符开头的所有记录将立即被忽略,而 UDF 或 CLR 正则表达式仍将读取这些值。

【讨论】:

    【解决方案4】:

    您应该可以使用类似搜索。您的 where 子句类似于:

    Where YourColumnName Like '%[0-9][0-9]-[a-z][a-z][a-z]%'
    

    *** 这假定一个不区分大小写的排序规则

    【讨论】:

      【解决方案5】:

      我建议使用 .Net 创建 CLR 程序集。这样您就可以创建一个可以使用正则表达式的函数或 SP。

      http://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/

      编辑:即使这可以通过 LIKE 来完成,如其他答案中所述,我仍然建议创建程序集。如果您的数据由于某种原因发生更改,并且您需要一种高级方式来查找数据,则此正则表达式程序集将能够适应更改

      【讨论】:

      • 使用 CLR 正则表达式对于这个来说太过分了。此外,在可能的情况下使用LIKE 通常会快得多,因为它是 SQL Server 原生的并且可以更好地使用索引(如果您可以防止初始的 '%' 或 '_')。
      • 有趣。我将对此进行研究以备将来使用。谢谢
      猜你喜欢
      • 1970-01-01
      • 2014-08-20
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2021-11-01
      • 2016-09-10
      • 2014-05-26
      相关资源
      最近更新 更多