You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Clojure中为PostgreSQL查询的username字段应用LOWER()函数?

实现方式

以下是两种基于你的代码库,为:username应用PostgreSQL LOWER()函数的可行方案:

方案一:数据库端对字段和输入值都应用LOWER函数

直接在Honey SQL的WHERE条件中,同时对表字段和传入参数使用LOWER()函数,确保匹配时不区分大小写:

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

Honey SQL会生成如下SQL语句:

SELECT * FROM "user" WHERE LOWER("username") = LOWER(?)

这种方式最健壮,无论传入的username是否为小写,数据库都会统一转换后比较,避免因应用层处理遗漏导致的匹配失败。

方案二:应用层转小写,数据库仅处理字段

先在Clojure代码中将输入的username转为小写,再让数据库对表字段应用LOWER()函数:

(require '[clojure.string :as str])

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

生成的SQL语句为:

SELECT * FROM "user" WHERE LOWER("username") = ?

这种方式减少了一次数据库端的函数调用,适合能确保应用层输入转换逻辑可靠的场景。

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:33:24