Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从时间戳日期中减去1天_Sql_Postgresql_Date_Casting_Timestamp - Fatal编程技术网

Sql 从时间戳日期中减去1天

Sql 从时间戳日期中减去1天,sql,postgresql,date,casting,timestamp,Sql,Postgresql,Date,Casting,Timestamp,我正在为Postgresql使用Datagrip。我有一个带有时间戳格式的日期字段的表(例如:2016-11-01 00:00:00)。我希望能够: 应用数学运算符减去1天 根据今天—130天的时间窗口进行过滤 不显示邮票的hh/mm/ss部分(2016-10-31) 当前开始查询: select org_id, count(accounts) as count, ((date_at) - 1) as dateat from sourcetable where date_at <=

我正在为Postgresql使用Datagrip。我有一个带有时间戳格式的日期字段的表(例如:2016-11-01 00:00:00)。我希望能够:

  • 应用数学运算符减去1天
  • 根据今天—130天的时间窗口进行过滤
  • 不显示邮票的hh/mm/ss部分(2016-10-31)
  • 当前开始查询:

    select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
    from sourcetable 
    where  date_at <= now() - 130
    group by org_id, dateat
    
    选择组织id,将(账户)作为计数,((日期)-1)作为日期
    从sourcetable
    
    其中日期在使用
    间隔
    类型。例如:

    --yesterday
    SELECT NOW() - INTERVAL '1 DAY';
    
    --Unrelated: PostgreSQL also supports some interesting shortcuts:
    SELECT 
        'yesterday'::TIMESTAMP, 
        'tomorrow'::TIMESTAMP, 
        'allballs'::TIME AS aka_midnight;
    
    然后,您可以执行以下操作:

    SELECT 
        org_id,
        count(accounts) AS COUNT,
        ((date_at) - INTERVAL '1 DAY') AS dateat
    FROM 
        sourcetable
    WHERE 
        date_at <= now() - INTERVAL '130 DAYS'
    GROUP BY 
        org_id,
        dateat;
    
    提示2 您还可以使用
    make_interval
    函数创建一个间隔,当您需要在运行时创建它时(不使用文字),该函数非常有用:

    更多信息:


    .

    您可以将
    时间戳
    强制转换为
    日期
    ,这允许您从中减去一个
    整数

    例如,要获得昨天:

    now()::日期-1
    
    因此,您的查询将变成:

    选择组织id,日期日期::日期-1作为日期,计数(帐户)作为计数
    从sourcetable
    
    对于那些好奇的人来说,“所有球”是午夜的字面意思,因为它看起来像00:00:00。
    SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';
    
    SELECT make_interval(days => 10 + 2);
    SELECT make_interval(days => 1, hours => 2);
    SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);