我有一个名称列表,我想匹配不区分大小写,有没有办法在不使用下面的循环的情况下执行此操作?
a = ['name1', 'name2', 'name3']
result = any([Name.objects.filter(name__iexact=name) for name in a])
Run Code Online (Sandbox Code Playgroud) 我使用SQLite3进行开发,使用PostgreSQL进行部署.但是,我面临以下问题:
我的简单搜索使用SQLite3:
def self.search(search)
if search
find(:all, :conditions => ["style LIKE ? OR construction LIKE ?", "%#{search}%", "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用PostgreSQL,我需要替换LIKEfor ILIKE来解决问题:
def self.search(search)
if search
find(:all, :conditions => ["style ILIKE ? OR construction ILIKE ?", "%#{search}%", "%#{search}%"])
else
find(:all)
end
end
Run Code Online (Sandbox Code Playgroud)
是否有"Ruby方式"在任何数据库中进行这些搜索?
编辑 - 基于您的答案我不相信我会找到一个通用的Ruby解决方案.
我也跟着Ruby on Rails的教程:学习的榜样导轨-由迈克尔·哈特尔,在最终的Gemfile显示这两个数据库...嗯,令人失望...
我有一个 postgres 表(用户),其中有一个 JSONb 列(元数据)。目前,我正在通过电子邮件搜索用户,它工作得很好,只是电子邮件必须完全匹配。
因此,如果用户有电子邮件bob@smith.com并且我User.by_email("bob@smith.com")这样做,效果会很好。但我想User.by_email("@smith.com")返回所有具有匹配电子邮件的用户。
在我的user.rb模型中,我有以下内容:
scope :by_email, ->(email) { where("metadata @> ?", { session: { Primary: { Email: email.to_s.downcase} } }.to_json) }
Run Code Online (Sandbox Code Playgroud)
这就是允许User.by_email(email)工作的原因。如何修改它以查找具有与传入字符串匹配的电子邮件的所有用户?
第二部分是我也希望能够按用户名进行搜索。
这将通过以下方式完成scope :by_name, ->(name) { where("metadata @> ?", { session: { Primary: { FullName: name.to_s} } }.to_json) }
我怎样才能同时做这两件事?如果这只是简单的 activerecord 我知道我可以这样做:
User.where("full_name LIKE ? OR email LIKE", "%#{search}%","%#{search}%")
Run Code Online (Sandbox Code Playgroud)
如何使用 JSONb 列执行此操作?
我有很多使用“WHERE”子句的 sql 查询命令,我只是想知道我的 postgresql 搜索是否区分大小写。
例如:
Select * From myarea Where area_name = 'Jawa Barat1' --> not found
Select * from myarea Where area_name = 'jawa barat1' --> found
Run Code Online (Sandbox Code Playgroud)
如何关闭 postgresql 中区分大小写的搜索?
请不要建议我将sql命令更改为将两侧设置为小写。
期望 postgresql 区分大小写搜索(Mother = mother)
我有这个查询,必须选择通过描述过滤的所有书籍,忽略大写/小写。
所以我在 adonis.js / node.js 中进行此查询:
const queryBook = Book
.query()
.with('user')
queryBook.where('description', 'like', '%'+bookDescription[0]+'%')
Run Code Online (Sandbox Code Playgroud)
我有这样的记录bookDescription:
“学生西班牙语版 1 版”
但是当我尝试仅使用小写的“es”进行过滤时,knex 不会返回任何记录。
当我输入“Es”时,将带有我输入的描述的书归还,因此,类似 %es% 不起作用。
我进行了一次调试,发现了这一点:
knex:query select * from "books" where "description" like ? limit ? undefined +7ms
knex:bindings [ '%es%', 10 ] undefined +6ms
Run Code Online (Sandbox Code Playgroud)
显然我没有发现任何错误,但我认为必须like以小写形式返回记录。
我忘记了什么?
postgresql ×3
activerecord ×1
adonis.js ×1
django ×1
jsonb ×1
knex.js ×1
node.js ×1
ruby ×1
search ×1
sqlite ×1