如何使用 Clojure 将 PostgreSQL 函数应用于查询?

How do I apply a PostgreSQL function to a query using Clojure?

提问人:newbie 提问时间:11/16/2023 最后编辑:newbie 更新时间:11/16/2023 访问量:54

问:

(ns training-clj.querys
  (:require [honey.sql :as honey]
            [next.jdbc.sql :as jdbc]))

(defn get-by-username
  [db username]
  (let [query (honey/format {:select [:*]
                             :from   [:user]
                             :where  [:= :username username]]})]
    (jdbc/query db query)))

我正在每个用户的数据库(postgresql)中进行查询,并且我有一个类似于以下内容的返回: 鉴于我定义的这个代码库,我想将 PostgreSQL LOWER() 函数应用于 :username 键,我有什么方法可以做到这一点?({:id 2 :username "random" :age 18 :telephone 3120-4587})

postgresql clojure clojurescript clojure-java-interop

评论

1赞 cfrick 11/16/2023
此函数不返回单个字符串。它最有可能返回“用户”列表。您究竟想在哪里使用较低功能?为了比较?

答:

2赞 Eugene Pakhomov 11/16/2023 #1

您使用的是 HoneySQL,因此应通过 HoneySQL 的 DSL 调用 PostgreSQL 函数。此处介绍了相关部分。

至于您的具体问题,目前尚不清楚该函数必须应用于什么,因为返回所有列。lower:*

但是,假设您要返回 ,只是小写。然后是这样的::first-name

{:select [[[:lower :first-name]]]
 ...}

{:select :%lower.first-name
 ...}

评论

1赞 newbie 11/16/2023
完美,它奏效了,很抱歉无法清楚地解释它,我是这方面的初学者,但你能告诉我如何将低键应用于查询键吗?
1赞 Eugene Pakhomov 11/17/2023
@django “查询键”是什么意思?如果您指的是在原始查询中筛选的用户名,则它是 .{... :where [:= :%lower.username username]}