sab*_*ams 34 sqlite activerecord expression ruby-on-rails
我正在尝试搜索A0001,A0002,A1234,A2351等系列中的最大数字...问题是我正在搜索的列表也有字符串,如AG108939,E092357,AL399,22-30597等等......
基本上,我想在我的数据库中获得最高的####值.我使用以下查询:
@max_draw = Drawing.where("drawing_number LIKE ?", "A%")
Run Code Online (Sandbox Code Playgroud)
这种情况一直有效,直到像AG309这样的数字开始受阻,因为它以A开头,但格式与我正在寻找的格式不同.
我假设这应该是非常直接的正则表达式,但我是新来的,不知道如何正确编写这个查询与正则表达式.以下是我试过的一些东西,只需返回nil:
@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]%")
Run Code Online (Sandbox Code Playgroud)
Epi*_*ene 63
在带有Postgres数据库的Rails 4+上,RegEx查询的一般形式是:
Model.where("column ~* ?", 'regex')
Run Code Online (Sandbox Code Playgroud)
至于正则表达式,它可以是一般的'^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
Run Code Online (Sandbox Code Playgroud)
基本上,正则表达式读取"字符串应该以A开头,后跟四位数,然后字符串应该结束".最后的查询行是:
@max_draw = Drawing.where("drawing_number ~* ?", '^A\d{4}$')
Run Code Online (Sandbox Code Playgroud)
进一步阅读RubyDoc上的ruby RegEx 或更易于访问的Perl变体(由Sublime文本使用)
dav*_*son 23
你做得好!缺少的是REGEXP在查询中用于正则表达式的函数:
所以在你的情况下使用
Drawing.where("drawing_number REGEXP ?", 'A\d{4}')
# the {4} defines that there have to be exactly 4 numbers, change if you need to
Run Code Online (Sandbox Code Playgroud)
在SQL中你使用'-colons,这很奇怪,因为你通常使用正则表达式/-backslashes
| 归档时间: |
|
| 查看次数: |
26070 次 |
| 最近记录: |