【问题标题】:Using multiple values in mySQL regexp在 mySQL 正则表达式中使用多个值
【发布时间】:2011-08-19 14:28:33
【问题描述】:

我有一个问题:

SELECT * from arrc_Voucher WHERE VoucherNbr REGEXP "^1002"

这很好用 - VoucherNbr 是一个 16 个字符的代码,此查询查找前四位数字为 1002 的所有记录。

现在我需要扩展它,而且我对正则表达式不是很好。我需要能够找到前四位数字为 1002、1010、2015 或 3156 的所有记录。如果这些是完整的数字,我只需使用 IN:

SELECT * from arrc_Voucher WHERE VoucherNbr IN (1002, 1010, 2015, 3156)

但由于我需要以这些数字开头的代码,所以这行不通。谁能帮我扩展正则表达式以便它可以查找多个值?为了让它更有趣,这些值不能被硬编码;它们存储在数据库配置表中,并由自定义 php 函数以逗号分隔的字符串形式返回。所以我需要能够编写查询,以便正则表达式可以获取返回字符串的值,而不是我提到的特定四个数字。

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    您可以使用以下正则表达式,使用the union operator (|)。

    REGEXP "^(1002|1010|2015|3156)"
    

    【讨论】:

      【解决方案2】:
      VoucherNbr REGEXP "^(1002|1010|2015|3156)"
      

      可读性差,但回溯较少:

      VoucherNbr REGEXP "^(10(02|10)|2015|3156)"
      

      您当然也可以执行以下操作:

      LEFT(VoucherNbr, 4) IN (1002, 1010, 2015, 3156)
      

      更新:添加了第二个和第三个解决方案。

      【讨论】:

      • 感谢您的各种选择。我可能会选择第一个,因为我们也将正则表达式用于其他查询,并且更容易使代码尽可能相似。但是,是的,第三个肯定会起作用,如果我根本不打算处理正则表达式,我会使用它。
      猜你喜欢
      • 2012-06-24
      • 2020-12-28
      • 2012-12-14
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多