【问题标题】:How count days between custom hours like 8:30 Am to 18:00 Pm is One days oracle sql query [closed]如何计算自定义时间(例如上午 8:30 到下午 18:00)之间的天数是 1 天 oracle sql 查询 [关闭]
【发布时间】:2021-04-02 03:33:47
【问题描述】:

任何人都可以帮助我在提交记录后仅在下午 8:30 到下午 6:00 之间查询两个日期

如果在上午 8:30 到下午 6:00 之间提交记录,则将计为 1 天。如果在下午 6:00 之后提交记录,它将在第二天记录

【问题讨论】:

    标签: sql oracle datetime oracle11g count


    【解决方案1】:

    如果在下午 6:00 之后提交记录,它将在第二天记录:

    如果您想从前一天的 18:00 到当天的 18:00 按天计算日期,那么您可以在截断之前将 6 小时减去 1 秒添加到日期,然后按此分组:

    SELECT TRUNC( date_column + INTERVAL '5:59:59' HOUR TO SECOND ) AS date_column,
           COUNT(*)
    FROM   table_name
    GROUP BY
           TRUNC( date_column + INTERVAL '5:59:59' HOUR TO SECOND )
    ORDER BY
           date_column;
    

    其中,对于样本数据:

    CREATE TABLE table_name ( date_column ) AS
    SELECT DATE '2020-01-01' + LEVEL * INTERVAL '1' HOUR
    FROM   DUAL
    CONNECT BY LEVEL <= 50;
    

    输出:

    DATE_COLUMN |数数(*) :----------------- | --------: 2020-01-01 00:00:00 | 18 2020-01-02 00:00:00 | 24 2020-01-03 00:00:00 | 8

    db小提琴here

    【讨论】:

      【解决方案2】:

      您可以尝试使用CASE:如果日期列称为datum(如我的示例中)并且其小时在18:00(即下午6点)之后,则将其设为“明天上午 10 点”(所以它适合第二天)。否则,取“今天”日期。像这样的:

      with data as
        (select t.*,
                case when to_char(t.datum, 'hh24mi') > '1800' then trunc(t.datum + 1) + 10/24
                     else t.datum
                end datum
         from your_table t
        )
      select trunc(d.datum) datum,
             count(*)
      from data d
      group by trunc(d.datum)
      

      【讨论】:

      • 18:00:0118:00:00 之后,但这不会转移到第二天,直到19:00:00
      • 对!谢谢,已修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多