简单案例
LIKE
用于字符串/文本类型。由于您的主键是整数,因此您应该改用数学运算。
id
当除以 100 时,使用模数得到余数。
Item.where("id % 100 = 88")
这将返回Item
其id
列以88
1288
1488
1238872388
862388
ETC...
匹配任意一组最后两位数字
如果您要动态执行此操作(例如,匹配任意两位数,但您知道它始终是两位数),您可以执行以下操作:
Item.where(["id % 100 = ?", last_two_digits)
匹配任何一组或任意数量的最终数字
如果您想匹配任意数量的数字,只要它们始终是最终数字(与字段中其他地方出现的数字相反id
),您可以在模型上添加自定义方法。就像是:
class Item < ActiveRecord
...
def find_by_final_digits(num_digits, digit_pattern)
# Where 'num_digits' is the number of final digits to match
# and `digit_pattern` is the set of final digits you're looking fo
Item.where(["id % ? = ?", 10**num_digits, digit_pattern])
end
...
end
使用此方法,您可以找到以 ,id
结尾的值88
:
Item.find_by_final_digits(2, 88)
匹配任意长度的最终数字范围
假设您想查找以 和 之间的数字结尾的所有值,id
无论出于何种原因。也许它们代表您正在查找的一些特殊范围的代码。为此,您可以执行另一种自定义方法来使用 Postgres查找范围。 09
12
BETWEEN
def find_by_final_digit_range(num_digits, start_of_range, end_of_range)
Item.where(["id % ? BETWEEN ? AND ?", 10**num_digits, start_of_range, end_of_range)
end
...并且可以使用以下方法调用:
Item.find_by_final_digit_range(2, 9, 12)
...当然,这只是有点疯狂,而且可能矫枉过正。