Ecto SQL Fragment失败了,为什么?

时间:2016-03-20 13:09:37

标签: sql elixir ecto

尝试执行SQL片段:

subChannel.basicQos(10);

但它失败了,它会生成以下SQL和错误:

Repo.all from p in Posts, where: fragment("lower(?) in ?", p.title, ^["some-title"])

更新:解决方案

因此,经过大量试验,我想出了如何使用它:

SELECT p0."title" FROM "posts" AS p0 WHERE (lower(p0."title") in $1) [["some-title"]]

** (Postgrex.Error) ERROR (syntax_error): syntax error at or near "$1"

但仍然 - 为什么原始表达不起作用?看起来它也完全有效。

更新

  

Repo.all from p in Posts, where: fragment("lower(?)", p.title) in ^["some-title"])

之后应该有括号

我试过了,也没用:

in

1 个答案:

答案 0 :(得分:2)

1)是的,正确的方法是:

Repo.all from p in Posts, where: fragment("lower(?)", p.title) in ["some-title"])

2)原始查询不起作用,因为它生成错误的SQL语法。 它产生类似的东西:

... where lower(p.title) in ["some-title"] ...

正确的语法是:

... where lower(p.title) in ('some-title') ...