当前位置: 首页 > 知识库问答 >
问题:

SQL:从时间戳日期中减去1天

冯文彬
2023-03-14

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

  1. 应用数学运算符减去1天

当前开始查询:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

第1行的((日期)-1)子句导致:

[42883]错误:运算符不存在:没有时区的时间戳-整数提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。职位:69

now()子句产生了类似的消息:

[42883]错误:运算符不存在:带时区的时间戳-整数提示:没有运算符匹配给定的名称和参数类型。可能需要添加显式类型转换。职位:...

关于类型转换的在线指南毫无用处。欢迎您的意见。

共有2个答案

金钧
2023-03-14

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

例如,要获得昨天:

now()::DATE - 1

因此,您的查询将变成:

SELECT org_id, date_at::DATE - 1 AS dateat, COUNT(accounts) AS count
FROM sourcetable 
WHERE date_at <= NOW()::DATE - 130
GROUP BY 1, 2
范侯林
2023-03-14

对其使用INTERVAL类型。例如:

--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;

可以附加多个操作数。例如:如何获取当月的最后一天?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

您还可以使用make_interval函数创建一个间隔,当您需要在运行时创建它时(不使用文字),该函数非常有用:

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);

日期/时间函数和运算符

数据类型datetime(特殊值)。

 类似资料:
  • 我将Datagrip用于PostgreSQL。我有一个带有时间戳格式的日期字段的表。我希望能够: 应用数学运算符减去1天 根据当前-130天的时间窗口对其进行筛选 不显示邮票的HH/MM/SS部分(2016-10-31) 当前开始查询: 第1行的子句导致: [42883]错误:运算符不存在:没有时区的时间戳-整数提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。职位:69 子

  • 问题内容: 我有一个这样的日期: 如何返回同一日期但比一年前早的日期? 问题答案: 您可以使用: 该函数返回unix时间戳,可以使用以下格式的字符串:

  • 我只想从中减去1个小时。我试着在Google上查找,发现有一个名为minus的方法,它获取日期的副本并在这里获取特定的持续时间:http://www.joda.org/joda-time/apidocs/org/joda/time/datetime.html#minus(long) 但我不知道如何使用它,我也找不到一个例子在互联网上。 下面是我的代码: 我还尝试将解析为double,这样就可以减去

  • 问题内容: 关于Oracle,我是一个初学者。我在弄清楚如何执行与此类似的操作时遇到了麻烦: 简而言之,我想选择每个在特定日期和时间前N天出生的人,但是我不太确定这是这样做的方式,也不会使我获得预期的结果。 PS:我正在oracle8i下开发。 问题答案: 您的查询对我来说看起来是正确的。这就是您从Oracle中的日期中减去天数的方法。如果您想增加几个月或几年,此链接将为您提供更多的见解: htt

  • 问题内容: 这个问题已经在这里有了答案 : PL / SQL如何从日期中获取X天前的日期? (2个答案) 7年前关闭。 我想从sysdate中减去给定的x天数,有人可以在此方面为我提供帮助吗,我使用的是PL / SQL语言。谢谢! 问题答案: 使用sysdate-1从系统日期中减去一天。 输出:

  • 问题内容: 我得到一个datetime字段,当前在查询中为: 我想做的是从该日期减去3个小时(格林尼治标准时间问题),但是我无法在PHP中执行此操作,因为PHP仅知道日期部分,而不是时间。 问题答案: MySQL具有: 但是尝试解决潜在的时区问题会更好吗?