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

How to translate SQL `cast as` to Ecto DSL?

我有以下虚拟查询

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

Ecto 中怎么写?

您可以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)

您可以使用 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_password", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."id" = ::integer) [5]