Rails SQL:如何使用正则表达式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (86)

我试图在系列A 0001,A 0002,A 1234,A 2351等中搜索最大数目...。问题是,我搜索的列表也有字符串,如AG 108939、E 092357、AL 399、22-#number0#等...

基本上,我想要数据库中最高的A###值。我使用了以下查询:

@max_draw = Drawing.where("drawing_number LIKE ?", "A%")

直到AG 309这样的数字开始起作用,因为它以A开头,但格式与我所寻找的不同。

我假设正则表达式应该是非常直接的,但我是新手,不知道如何用正则表达式正确地编写这个查询。我尝试的:

 @max_draw = Drawing.where("drawing_number LIKE ?", /A\d+/)
 @max_draw = Drawing.where("drawing_number LIKE ?", "/A\d+/")
 @max_draw = Drawing.where("drawing_number LIKE ?", "A[0-9]%")
提问于
用户回答回答于

缺少的是REGEXP函数,用于查询中的regex:

Drawing.where("drawing_number REGEXP ?", 'A\d{4}')
# the {4} defines that there have to be exactly 4 numbers, change if you need to

在SQL中,使用'-colons。

用户回答回答于

在Rails 4+和Postgres数据库上,RegEx查询的一般形式是:

Model.where("column ~* ?", 'regex')

至于regex,它可以是一个将军。'^A\d+$'或者更具体'^A\d{4}$'分解:

^ - string start anchor
A - literal "A"
\d+ - one or more digits (0-9)
\d{4} - exactly four digits
$ - string end anchor

基本上,regex读取“字符串应该以A开头,后面跟着四位数,然后字符串应该结束”。最后的查询行是:

@max_draw = Drawing.where("drawing_number ~* ?", '^A\d{4}$')

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励