是否有运算符或简单的方法将表达式与 SQL 中的 LIKE 运算符匹配一次或多次?

J.D*_*.D. 4 sql-server regular-expression t-sql regex sql-server-2016

例如,如果我运行以下查询,WHERE 子句中的表达式将只匹配数字前的第一个字母,但有没有办法先匹配一个或多个字母(例如,在字母数量可变的情况下)在我过滤的字段中的数字之前)?

SELECT FilteredField
FROM Table
WHERE FilteredField LIKE '[a-zA-Z][0-9]'
Run Code Online (Sandbox Code Playgroud)

示例数据:

  1. ABC9
  2. DEF2
  3. GH7
  4. Z1
  5. XYH2

本质上,当使用 LIKE 运算符时,我正在寻找与 RegEx +等效的 SQL Server 2016 。

And*_*y M 12

如果您正在谈论纯粹在 Transact-SQL 中解决这个问题,您可以使用以下过滤器覆盖示例数据中的所有这些情况:

WHERE FilteredField LIKE '%[a-zA-Z][0-9]'
Run Code Online (Sandbox Code Playgroud)

如果你想额外规定数字前的所有字符必须是拉丁字母,你需要有点创意:

WHERE FilteredField     LIKE           '%[a-zA-Z][0-9]'
  AND FilteredField NOT LIKE '%[^a-zA-Z]%[a-zA-Z][0-9]'
Run Code Online (Sandbox Code Playgroud)

基本上,您是在说:

该值必须以字母和数字结尾,但该字母之前的任何内容都不能是非字母。

如果这是您所追求的,则无法仅使用内置语法通过单个条件来指定这一点。

  • @JD:是的,我希望你从一开始就发布了实际模式。感觉问题解决了,感觉很好。因此,与仅仅触及表面的感觉不同:) 然而,我实际上相信这个关于您的问题的简化版本的问题仍然有其自身的价值。我的回答展示了一种解决此类问题的方法,我建议您在寻求更多帮助之前先尝试使其适应您实际面临的问题。这对你来说可能是一次很棒的学习经历。 (3认同)
  • @JD:如果/当您发布新问题时,请随时在问题中包含您未成功的尝试。当人们看到 OP 的诚实努力时,他们会更有动力提供帮助,只是说。如有必要,您还可以包含指向此问题的链接以获取上下文。 (3认同)