相关疑难解决方法(0)

Django查询不区分大小写的列表匹配

我有一个名称列表,我想匹配不区分大小写,有没有办法在不使用下面的循环的情况下执行此操作?

a = ['name1', 'name2', 'name3']
result = any([Name.objects.filter(name__iexact=name) for name in a])
Run Code Online (Sandbox Code Playgroud)

django django-queryset

34
推荐指数
5
解决办法
1万
查看次数

SQLite3"LIKE"或PostgreSQL"ILIKE"的通用Ruby解决方案?

我使用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显示这两个数据库...嗯,令人失望...

sqlite postgresql search ruby-on-rails pattern-matching

17
推荐指数
3
解决办法
7398
查看次数

如何在 ruby​​ activerecord 中使用通配符搜索 postgres JSONb 列

我有一个 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 列执行此操作?

ruby postgresql activerecord ruby-on-rails jsonb

2
推荐指数
1
解决办法
1030
查看次数

如何关闭postgresql区分大小写的搜索?

我有很多使用“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)

postgresql case-sensitive

1
推荐指数
1
解决办法
5941
查看次数

带 Like + '%' 的 Knex 查询不起作用

我有这个查询,必须选择通过描述过滤的所有书籍,忽略大写/小写。

所以我在 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以小写形式返回记录。

我忘记了什么?

node.js knex.js adonis.js

1
推荐指数
1
解决办法
7892
查看次数