首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据:不区分大小写的查询

问数据:不区分大小写的查询
EN

Stack Overflow用户
提问于 2015-06-17 03:27:12
回答 2查看 639关注 0票数 3

我是新手,我正在尝试理解如何去做一个不区分大小写的查询。

例如:

代码语言:javascript
复制
[:find (pull ?u [:user/email])
     :where [?u :user/email "user1@example.net"]]

返回:

代码语言:javascript
复制
{:user/email "user1@example.net"}

我希望这个查询为一个指定为"USER1@example.net“的电子邮件返回相同的值,但Datomic正在对电子邮件进行区分大小写的比较,如下所示。

代码语言:javascript
复制
[:find (pull ?u [:user/email])
     :where [?u :user/email "USER1@example.net"]]

返回:

代码语言:javascript
复制
Nothing

有什么建议是构造查询的最佳方式,以便它进行区分大小写的比较?

EN

回答 2

Stack Overflow用户

发布于 2015-06-17 03:50:44

为了执行不区分大小写的查询,我使用Clojure re-find函数构造了查询,以便对传递的电子邮件执行不区分大小写的正则表达式匹配,如下所示:

代码语言:javascript
复制
  [:find (pull ?u [:user/email])
  :where
  [?u :user/email ?email]
  [(re-find #"(?i)USER1@example.net" ?email)]
  ] db)

现在返回:

代码语言:javascript
复制
   {:user/email "user1@example.net"}
票数 5
EN

Stack Overflow用户

发布于 2015-12-06 18:35:45

只需将查询字符串和数据库项转换为小写即可。

代码语言:javascript
复制
   (defn case-insensitive-get-email
      [email]
      (d/q '[:find ?lowercaseEmail .
             :in $ ?email
             :where
             [?e :user/email ?originalEmail]
             [(.toLowerCase ^String ?originalEmail) ?lowercaseEmail]
             [(= ?lowercaseEmail ?email)]]
      db (.toLowerCase email)
           )
      )

然后

(case-insensitive-get-email "USER1@example.net")

将会返回

代码语言:javascript
复制
"user1@example.net"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30876463

复制
相关文章

相似问题

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