簡體   English   中英

Elixir / Ecto / Postgres選擇多個列作為一個列

[英]Elixir / Ecto / Postgres Select multiple columns as one

我只想用兩個或更多列的簡單連接來執行Ecto查詢。

我認為以下elixir偽代碼已經顯示了我嘗試做的事情:

customers = Customer.undeleted(
  from c in Customer,
  select: %{id: c.id, name: c.name <> " – " <> c.street},
  order_by: c.name
) |> Repo.all

它讓我在SQL中瘋狂,因為它很簡單: ...SELECT c.id, concat(c.name, ' - ', c,street) AS name

有任何想法如何用ecto查詢來解決這個問題?

您不能在Ecto中的選擇表達式中使用<> 如果你想這樣調用concat ,你可以使用fragment

select: %{id: c.id, name: fragment("concat(?, ' - ', ?)", c.name, c.street)},

要添加到@Dogbert答案,您可以通過將SQL函數片段放在自定義宏中來清理代碼,如文檔中所述:

defmodule CustomSQLFunctions do
  defmacro concat(left, mid, right) do
    quote do
      fragment("concat(?, ?, ?)", unquote(left), unquote(mid), unquote(right))
    end
  end
end

然后導入以供查詢使用

import CustomSQLFunctions

customers = Customer.undeleted(
  from c in Customer,
  select: %{id: c.id, name: concat(c.name, ' - ', c.street)},
  order_by: c.name
) |> Repo.all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM