在Rails WHERE LIKE查询中,百分号是什么意思?

时间:2015-09-17 22:37:40

标签: sql ruby-on-rails search model

在这样的简单搜索中:

<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Main Rule" stopProcessing="true">
                    <match url=".*"/>
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
                    </conditions>
                    <action type="Rewrite" url="/"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

我知道find.where('name LIKE ?', "%#{search}%") 只是字符串插值。 #{search}符号有什么作用?

3 个答案:

答案 0 :(得分:8)

百分号%是SQL中的wildcard,匹配零个或多个字符。因此,如果search"hello",则会匹配数据库中的字符串,例如"hello""hello world""well hello world"等。

请注意,这是SQL的一部分,并不特定于Rails / ActiveRecord。可以使用的查询以及LIKE的精确行为因SQL方言(MySQL,PostgreSQL等)而异。

答案 1 :(得分:5)

search = 'something'
find.where('name LIKE ?', "%#{search}%")

在您的数据库中,它将被解释为

SELECT <fields> FROM finds WHERE name LIKE '%something%';

答案 2 :(得分:0)

类似查询中的百分号是通配符。所以,你的查询是&#34;任何内容,后跟search变量中的任何内容,后跟任何内容&#34;。

请注意,百分号的使用是SQL标准的一部分,并不特定于Rails或ActiveRecord。还要注意,这种搜索确实注意到了 - 你的SQL数据库将被强制扫描表中的每一行,试图找到匹配而不是依赖索引。