如何使用Diesel格式化SQL结果的日期?锈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Diesel格式化SQL结果的日期?锈相关的知识,希望对你有一定的参考价值。
我是刚开始在Rust中使用Diesel,在我的调查中,我已经能够通过JOINs通过以下方式在PostgreSQL中查询数据库:
let product_id = 1;
sales::table
.inner_join(product::table)
.select((
product::description,
sales::amount,
sales::date_sale
))
.filter(sales::product_id.eq(product_id))
.load(&diesel::PgConnection)
我的模特销售:
pub struct Sales
pub id: i32,
pub product_id: Option<i32>,
pub amount: Option<BigDecimal>,
pub date_sale: Option<NaiveDateTime>
结果与预期的一样,但是我需要为字段sales::date_sale
提供日期格式,而在pgadmin中我要使用to_char(date_sale, 'dd/mm/YYYY')
。
是否可以在Diesel中使用to_char
或以什么方式修改Diesel ORM带给我的数据?
答案
[使用ORM时,将以最合适的表示形式从数据库中提取数据,以供ORM进行解释;之后,您将在目标域中对其进行操作(在这种情况下为生锈)。
由于date_sale
是Option<NaiveDateTime>
,因此可以使用chrono提供的格式选项:
sale.date_sale.unwrap().format("%d/%m/%Y").to_string()
(当然,您的真实代码不会使用unwrap()
!]
或者,如果您确实需要数据库进行格式化,则可以使用[sql][2]
在查询中插入一些原始SQL:
let results = sales::table.select((sales::id, sql("to_char(date_sale, 'dd/mm/YYYY')")))
.load::<(i32, String)>(&conn);
如果您尝试实现一些在SQL中更容易或更有效地实现的逻辑,这将更加有用。
一个例子是一个过滤条件:假设您要包括表中的行,其中星期数是偶数。虽然您可以加载整个表,然后在rust域中对其进行过滤,但这并不是很有效。相反,您可以这样做:
let results = sales::table
.filter(sql("extract(week from date_sale)::smallint % 2=0"))
.load::<Sales>(&conn);
以上是关于如何使用Diesel格式化SQL结果的日期?锈的主要内容,如果未能解决你的问题,请参考以下文章