Ruby on rails 如何将此PostgreSQL正则表达式(不区分大小写)查询转换为ILIKE查询?

Ruby on rails 如何将此PostgreSQL正则表达式(不区分大小写)查询转换为ILIKE查询?,ruby-on-rails,regex,ruby,postgresql,Ruby On Rails,Regex,Ruby,Postgresql,我有一个查询当前使用PostgresQL .where("locations.address ~* '#{@street_name}.*#{@street_type}'") 为了防止在执行此查找时解释特殊字符,我需要改用ILIKE查询 我不确定查询的这一部分是做什么的,因此也不知道如何翻译它 .* 有人能帮我理解如何在不破坏当前查询构造方式的情况下将此查询转换为ILIKE查询吗?在正则表达式中表示“任意字符”,而*表示任意次数(包括零次)。因此,*表示包含任意长度字符的字

我有一个查询当前使用PostgresQL

.where("locations.address ~* '#{@street_name}.*#{@street_type}'")
为了防止在执行此查找时解释特殊字符,我需要改用ILIKE查询

我不确定查询的这一部分是做什么的,因此也不知道如何翻译它

.*

有人能帮我理解如何在不破坏当前查询构造方式的情况下将此查询转换为ILIKE查询吗?

在正则表达式中
表示“任意字符”,而
*
表示任意次数(包括零次)。因此,
*
表示包含任意长度字符的字符串

在Postgres中,模式中的
%
字符(与
(I)LIKE
一起使用)表示“零个或多个字符的任何字符串”()

因此,当从正则表达式匹配切换到模式匹配时,只需将
*
替换为
%


此外(与实际问题无关),使用字符串模板来创建SQL查询通常是一个非常糟糕的主意,因为此方法会使您面临更大的风险。相反,您应该使用ORM的变量功能。对于ActiveRecord,您可以将一个值数组传递给
,其中
,其中第一个元素是SQL语句模板,后续元素是要插入的变量或要插入的命名变量的散列。()

例如:

.where(["locations.address ILIKE ? || '%' || ?", street_name, street_type])


在正则表达式中,
表示“任意字符”,而
*
表示任意次数(包括零)。因此,
*
表示包含任意长度字符的字符串

在Postgres中,模式中的
%
字符(与
(I)LIKE
一起使用)表示“零个或多个字符的任何字符串”()

因此,当从正则表达式匹配切换到模式匹配时,只需将
*
替换为
%


此外(与实际问题无关),使用字符串模板来创建SQL查询通常是一个非常糟糕的主意,因为此方法会使您面临更大的风险。相反,您应该使用ORM的变量功能。对于ActiveRecord,您可以将一个值数组传递给
,其中
,其中第一个元素是SQL语句模板,后续元素是要插入的变量或要插入的命名变量的散列。()

例如:

.where(["locations.address ILIKE ? || '%' || ?", street_name, street_type])


谢谢亨利-为了用ILIKE代替~*这个方法行吗:
。where([“locations.address ILIKE?| |.*”,street\u name,street\u type])
?@BenRichardson如果你把
*
换成
%
应该行。那太好了-谢谢亨利-为了用ILIKE代替~*这个方法行吗:
([“locations.address ILIKE?| |'.*'| |?”,street|u name,street_type])
?@BenRichardson如果你把
*
换成
%
,那太好了-谢谢亨利:)