【问题标题】:How to subtract hours and minutes from each other in PostgreSQL如何在 PostgreSQL 中互相减去小时和分钟
【发布时间】:2019-07-23 00:35:12
【问题描述】:

我有两个字段dateTSclosingTime

  • dateTS 是一个普通的时间戳字段(例如 2019-07-13 22:31:10.000000)
  • closingTime 是商店关门时间(例如 23:00)的 HH:MM 格式

我需要一个 PostgreSQL 查询来减去这两个字段并获得它们之间的分钟数差异。

使用上面给出的示例,两个字段之间的差异为 28 分钟

到目前为止,我已经尝试了 datediff 函数的不同变体,但它不起作用。

我的猜测是我要么必须这样做

  • 一个。为closingTime 生成一个与dateTs 字段同一天的假时间戳,然后减去两个时间戳。

  • 乙。将两个字段的小时/分钟转换为浮点数并减去两个值以获得小时差并将其转换为分钟

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以通过将时间戳转换为时间来subtract他们:

    select closingtime - datets::time
    from your_table;
    

    这会给你一个interval作为结果。

    要将其转换为分钟,您可以获得秒数并将其除以 60:

    select (extract epoch from closingtime - datets::time) / 60
    from your_table;
    

    【讨论】:

      【解决方案2】:

      将您的关闭时间转换为一个间隔,将时间戳转换为时间,然后将两者相减。通过将时间戳转换为时间,您实际上是在丢弃日期部分。您可以从另一个中减去一个以生成差异作为间隔。

      select closingTime::interval - dateTS::time...
      

      例如:

      # select '23:00'::interval - now()::time;
          ?column?
      -----------------
       05:31:00.031141
      (1 row)
      

      如果需要,您可以将间隔转换为分钟:

      # select extract(epoch from ('23:00'::interval - now()::time)) / 60;
           ?column?
      ------------------
       327.435313083333
      (1 row)
      

      【讨论】:

      • 很奇怪,我在选择 dateTS::time 时收到此红移错误:[0A000][500310] [Amazon](500310) 无效操作:不支持指定的类型或函数(每个 INFO 消息一个)红移表。无论如何,我已经在dateTS 上使用了子字符串函数来获取 HH:MM 并使用了间隔,现在它可以工作了! extract(epoch from (closingTime::interval-substring(dateTS,12,5)::interval))/60
      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      相关资源
      最近更新 更多