如何将SQL`cast as`翻译成Ecto DSL?

时间:2016-11-23 15:47:19

标签: elixir ecto

我有以下虚拟查询

SELECT * FROM dummy_table
ORDER BY CAST(number_in_string AS DECIMAL)

如何在Ecto中写出来?

2 个答案:

答案 0 :(得分:1)

你可以order_by这样的片段:

fragment("CAST(? as DECIMAL)", dt.number_in_string)

from(p in Post, order_by: [asc: fragment("CAST(? as DECIMAL)", p.id)])生成以下查询:

  

SELECT p0。“id”,p0。“title”,p0。“user_id”,p0。“inserted_at”,p0。“updated_at”FROM“posts”AS p0 ORDER BY CAST(p0。“id”as DECIMAL )

答案 1 :(得分:0)

您可以使用type/2

from u in User, where: u.id == type(^"5", :integer)

生成了以下查询

  

SELECT u0。“id”,u0。“first_name”,u0。“last_name”,u0。“email”,u0。“encrypted_pa​​ssword”,u0。“inserted_at”,u0。“updated_at”FROM“users”AS u0 WHERE(u0。“id”= $ 1 ::整数)[5]