在部分属性上使用LIKE查找记录

时间:2014-04-23 11:00:58

标签: ruby-on-rails activerecord

在我的应用中,我有这样的发票号码:

2014.DEV.0001
2014.DEV.0002
2014.TSZ.0003

三个字符代码是公司代码。当需要分配新的发票编号时,它应该查找该特定公司代码的最后使用的发票编号,并为其添加一个。

我知道公司代码,我使用LIKE搜索部分发票号码,如下所示:

last = Invoice.where("invoice_nr LIKE ?", "#{DateTime.now.year}.#{company_short}.").last

这导致此SQL查询:

SELECT "invoices".* FROM "invoices" WHERE "invoices"."account_id" = 1 AND (invoice_nr LIKE '2014.TSZ.') ORDER BY "invoices"."id" DESC LIMIT 1

但不幸的是,它没有返回任何结果。有任何改进的想法,因为使用LIKE进行搜索似乎不正确吗?

3 个答案:

答案 0 :(得分:0)

您希望%为部分匹配

last = Invoice.where("invoice_nr LIKE ?", "%#{DateTime.now.year}.#{company_short}.%").last

答案 1 :(得分:0)

尝试使用%包装字符串并使用lower将查询字符串和结果转换为小写,以避免因case导致任何错误结果,请尝试此操作

last = Invoice.where("lower(invoice_nr) LIKE lower(?)", "%#{DateTime.now.year}.#{company_short}.%").last

答案 2 :(得分:0)

由于您只想匹配左侧部分,因此需要在字符串的右侧添加一个%

Invoice.where("invoice_nr LIKE ?", "#{DateTime.now.year}.#{company_short}.%").last