首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部分属性上查找带有LIKE的记录

在部分属性上查找带有LIKE的记录
EN

Stack Overflow用户
提问于 2014-04-23 11:00:58
回答 3查看 40关注 0票数 0

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

代码语言:javascript
复制
2014.DEV.0001
2014.DEV.0002
2014.TSZ.0003

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

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

代码语言:javascript
复制
last = Invoice.where("invoice_nr LIKE ?", "#{DateTime.now.year}.#{company_short}.").last

这将导致这个SQL查询:

代码语言:javascript
复制
SELECT "invoices".* FROM "invoices" WHERE "invoices"."account_id" = 1 AND (invoice_nr LIKE '2014.TSZ.') ORDER BY "invoices"."id" DESC LIMIT 1

但不幸的是它没有返回任何结果。如果用LIKE搜索似乎不正确,那么有什么改进的办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-23 11:04:33

尝试用%包装字符串,并使用lower将查询字符串和结果转换为小写,以避免由于case导致的任何错误结果,尝试如下

代码语言:javascript
复制
last = Invoice.where("lower(invoice_nr) LIKE lower(?)", "%#{DateTime.now.year}.#{company_short}.%").last
票数 0
EN

Stack Overflow用户

发布于 2014-04-23 11:04:15

你想要%进行部分匹配

代码语言:javascript
复制
last = Invoice.where("invoice_nr LIKE ?", "%#{DateTime.now.year}.#{company_short}.%").last
票数 0
EN

Stack Overflow用户

发布于 2014-04-23 11:06:21

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

代码语言:javascript
复制
Invoice.where("invoice_nr LIKE ?", "#{DateTime.now.year}.#{company_short}.%").last
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23242303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档