gpt4 book ai didi

elixir - 将表示日期的字符串传递给 Ecto 中的 postgres 查询

转载 作者:行者123 更新时间:2023-12-03 04:59:04 24 4
gpt4 key购买 nike

尝试执行此 postgres 查询:

select date('2015-10-05') from posts;

我将日期作为字符串传递:

Ecto.Adapters.SQL.query!(
Repo, "select date('$1') from posts", ["2015-10-05"])

但是收到日期时间格式无效的错误。

** (Postgrex.Error) ERROR (invalid_datetime_format): 
invalid input syntax for type date: "$1"

[debug] select date('$1') from posts ["2015-10-05"]
ERROR query=0.6ms
(ecto) lib/ecto/adapters/sql.ex:172: Ecto.Adapters.SQL.query!/5

但是,我不会将其作为日期传递,而是作为字符串传递。 Postgres 的 date() 函数也接受字符串,据我所知,当我添加 ::varchar 以确保它是一个字符串时,错误仍然是相同的。有什么建议可以避免这种情况吗?

最佳答案

因此,您希望以 {2015, 10, 5} 的形式将其传递到 Ecto,而不是作为字符串。

Ecto.Adapters.SQL.query(Repo, "SELECT $1::date", [{2015, 10, 5}])

您可以创建一个小辅助函数来将字符串转换为该格式:

def string_to_date(str) do
{_, date} = Ecto.Date.cast(str)
Ecto.Date.to_erl(date)
end

关于elixir - 将表示日期的字符串传递给 Ecto 中的 postgres 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433658/

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