gpt4 book ai didi

postgresql - 如何使用uuid搜索数据库?

转载 作者:行者123 更新时间:2023-11-29 14:34:49 25 4
gpt4 key购买 nike

我正在使用带有 postgresql 的 phoenix-framework。

为了实现搜索功能,我使用了 ilike ecto 查询,所有搜索功能都运行良好。例如,我有一个用产品名称搜索产品的功能,效果很好。

def item_searh_results(language_id, name) do
from(p in ItemLanguage, where: p.language_id == ^language_id
and ilike(p.name, ^("%#{name}%")),
select: %{id: p.item_id,
name: p.name}) |> Repo.all
end

我有一个模型,Sales,它使用 uuid 作为主键。

我正在尝试使用类似上述功能的 ilike ecto 查询 api 来搜索销售。所以我做了类似的查询。

from(p in Sales, where: ilike(p.id, ^("%#{id}%")))|> Repo.all

但是,它返回一个错误 ** (Postgrex.Error) ERROR 42883 (undefined_function): operator does not exist: uuid ~~* unknown
是否可以使用 ilike 查询来搜索?如果是,我在这里做错了什么?

提前致谢。

最佳答案

我假设您想在 UUID 的十六进制表示中进行子字符串搜索(例如 "%a%" 应该匹配并且 "%e%"不应匹配 015cd1d7-2794-4247-a24f-16b84ca9a3ac)。您可以通过将 UUID 值显式转换为 text 然后执行 ilike 来做到这一点:

from(p in Sales, where: ilike(fragment("?::text", p.id), ^"%#{id}%")) |> Repo.all

(我还删除了搜索字符串周围的一组冗余括号。)

关于postgresql - 如何使用uuid搜索数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com