将表示日期的字符串传递给 Ecto 中的 postgres 查询
Passing a string representing date to postgres query in Ecto
正在尝试执行此 postgres 查询:
select date('2015-10-05') from posts;
我将日期作为字符串传递:
Ecto.Adapters.SQL.query!(
Repo, "select date('') from posts", ["2015-10-05"])
但是收到日期时间格式无效的错误。
** (Postgrex.Error) ERROR (invalid_datetime_format):
invalid input syntax for type date: ""
[debug] select date('') 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 ::date", [{2015, 10, 5}])
您可以编写一个小辅助函数来将字符串转换为该格式:
def string_to_date(str) do
{_, date} = Ecto.Date.cast(str)
Ecto.Date.to_erl(date)
end
正在尝试执行此 postgres 查询:
select date('2015-10-05') from posts;
我将日期作为字符串传递:
Ecto.Adapters.SQL.query!(
Repo, "select date('') from posts", ["2015-10-05"])
但是收到日期时间格式无效的错误。
** (Postgrex.Error) ERROR (invalid_datetime_format):
invalid input syntax for type date: ""
[debug] select date('') 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 ::date", [{2015, 10, 5}])
您可以编写一个小辅助函数来将字符串转换为该格式:
def string_to_date(str) do
{_, date} = Ecto.Date.cast(str)
Ecto.Date.to_erl(date)
end