Ruby on rails Rails:在where子句中将字符串字段强制转换为整数

Ruby on rails Rails:在where子句中将字符串字段强制转换为整数,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,在postgres数据库中,我在orders表中有一个字符串字段code。该字段包含“COA-38-A”、“EFILLDIRT”和“HE60LS-A”等值。UI上有一个表单,用于根据code筛选订单,字段中只允许使用整数值 查询应通过code字段中的整数值过滤订单,即如果输入30,查询应返回代码为“COA-38-A”和“HE60LS-A”的订单,因为查询包含= 我尝试在查询中添加::integer: Order.where('code::integer >= ?', params[:cod

postgres
数据库中,我在
orders
表中有一个字符串字段
code
。该字段包含“COA-38-A”、“EFILLDIRT”和“HE60LS-A”等值。UI上有一个表单,用于根据
code
筛选订单,字段中只允许使用整数值

查询应通过
code
字段中的整数值过滤订单,即如果输入30,查询应返回代码为“COA-38-A”和“HE60LS-A”的订单,因为查询包含
=

我尝试在查询中添加
::integer

Order.where('code::integer >= ?', params[:code])
但出现以下错误:

PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer
有没有办法只按整数值过滤?

试试这个

Order.where("regexp_replace(0||code, '[^0-9]+', '', 'g')::integer >= ?", params[:code].to_i)

COA-3A-8
>=30?。想从COA-38-A中选择38个,然后从COA-38-A中选择38>=30?我得到了-你会从COA-3A-8中选择什么?。。3.38? 8?所有整数值,即38
regexp\u replace(代码“[^0-9]+”,“'g')
应获得所有数字,这是一个非常好的答案。是否需要在
params[:code]
上执行
#到
。因此,我不知道它是否应该是
params[:code]。to_s
params[:code]
-我使用了OP中的代码,但答案被编辑为带有
#to#s
如果to#s代表
to string
,我认为根本不需要它是的
#to#s
是“to string”。这是一个很好的答案,因为它解决了OP的问题,而且您在语法方面做了值得信赖的工作。我建议使用
params[:code].to_I
,因为实际上该参数将作为字符串输入,需要作为整数替换。尝试后获得此结果:
PG::invalidtextresentation:ERROR:整数的输入语法无效:“”
@Arif修改为前导0,因此空字符串将变为0