首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锈蚀柴油机中如何利用时间戳和时间间隔进行运算

锈蚀柴油机中如何利用时间戳和时间间隔进行运算
EN

Stack Overflow用户
提问于 2020-01-30 15:31:07
回答 1查看 831关注 0票数 1

我一直在尝试使用过滤器表达式构造一个柴油查询,该表达式可以对时间戳和时间间隔进行算术和比较。我相信以下的表达是不可能用开箱即用的柴油写的.不幸的是,我求助于使用sql(...)函数的大锤方法:

代码语言:javascript
复制
let query = videos::table
    .inner_join(events::table)
    .filter(sql(r#""events"."start_date" <= NOW() + interval '60 seconds'"#))
    .filter(sql(r#""events"."start_date" + ("videos"."duration" * interval '1 second') > NOW()"#))

我的(缩写)模式:

代码语言:javascript
复制
table! {
    events (id) {
        id -> Int4,
        video_id -> Int4,
        start_date -> Timestamp,
    }
}

table! {
    videos (id) {
        id -> Int4,
        duration -> Float4,
    }
}

我的问题:

  1. 我说错了吗?这能用没有定制类型的柴油写吗?
  2. 如果这不能用香草柴油写,我如何才能把它分解成一个更安全,柴油友好的表达方式呢?哪些部件是定制的,哪些是我需要实施的特性?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 21:11:14

我说错了吗?这能用没有定制类型的柴油写吗?

是的,这可以用柴油提供的方法和一些小的模式修改来编写。参见相应的文档

柴油要求您只能在时间戳中添加/减缩间隔。这意味着您需要稍微使用模式才能做到这一点:

代码语言:javascript
复制
table! {
    videos (id) {
        id -> Int4,
        duration -> Interval,
    }
}

然后,您的查询如下所示:

代码语言:javascript
复制
let query = videos::table
    .inner_join(events::table)
    .filter(events::start_date.le(now + 60.seconds()))
    .filter(now.lt(events::start_date + videos::duration))

如果这不能用香草柴油写,我如何才能把它分解成一个更安全,柴油友好的表达方式呢?哪些部件是定制的,哪些是我需要实施的特性?

从理论上讲,在柴油以外实施这一措施是可能的。该代码很可能与在柴油中实现该代码的方法相同。您可能需要使用本地类型和更多具体的隐式。因此,如果您不能更改videos::duration的类型,那么沿着这条路线走下去可能是有意义的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59989388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档