【问题标题】:expressions including functions for values in interval type for postgres表达式,包括用于 postgres 的区间类型值的函数
【发布时间】:2020-04-28 13:27:20
【问题描述】:

postgres db 中有没有办法。在区间类型中有表达式? ,例如我可以执行查询 -

select (timestamp '1970-01-01 00:00:00' + interval '1 second' * J0.C3) from T637 J0

现在,我需要能够动态操作“1 秒”的值,这意味着 postgres 的“(1+2)秒”失败,以及“值部分”值(如果它是通过函数派生的) ,并且该函数的输出是一些整数,我不能在间隔中使用该函数,例如区间func(args) seconds,如何在postgres db中为“区间”实现这样的动态“值部分”?

【问题讨论】:

  • 我构建的查询是由java代码动态生成的,最终我要构建的查询是-interval '((1-EXTRACT(day from (timestamp '1970-01-01 00: 00:00' + 间隔 '1 秒' * J0.C3 - 间隔 '28800 秒'))))Day',我知道它可能会被部分破坏,例如 - 间隔 '1 天' - 间隔(其余部分以天为单位,现在“其余部分以天为单位”再次分为间隔 '1 天' * EXTRACT(day from (...)) 等等,但我无法将已经生成的查询遍历回来,以打破格式, 间隔 '1 秒' * (一些整数值)

标签: postgresql intervals


【解决方案1】:

interval '(1+2) seconds' 不是有效的表达式。但是,interval '1 second' * 2 是有效的。

因此,要获得 '(m+n) seconds' 的等价物,通常会这样做:

(interval '1 second' * m) + (interval '1 second' * n)

(m+n) * interval '1 second'

同样,如果有一个函数返回一个数值并且我们想要一个该大小的间隔(以秒为单位),则可以使用以下内容:

func(args) * (interval '1 second')

【讨论】:

    【解决方案2】:

    对于这种“间隔构建”,make_interval() 是相当得心应手的:

    make_interval(secs => (1 + 2) * some_column);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-26
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多