回答

收藏

从时间戳日期减去1天

技术问答 技术问答 679 人阅读 | 0 人回复 | 2023-09-14

我正在使用Datagrip for Postgresql。我有一个带有时间戳格式的日期字段表(ex: 2016-11-0100:00:00); D2 a# ]9 A) f5 j
[ol]应用数学运算符减去1天% E( a. H$ p, P, V+ C
根据今天-窗口过滤130天$ ^7 C# g0 j# K
没有邮票hh / mm / ss部分显示(2016)-10-31)[/ol]当前的起始查询:
- |1 M  U4 \  N4 x! Aselect org_id,count(accounts) as count,((date_at) - 1) as dateat from sourcetable where  date_at ((date_at)-1)第一行子句:
" F& O9 h/ a4 s! I5 k1 a: x[42883]错误:操作符不存在:没有时间戳-整数提示:没有操作符来匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置:69
/ t8 u+ C# h$ C* m/ j: k% D
该now()句子产生类似的消息:
# V. ?7 ]  e: r' u- c[42883]错误:运算符不存在:带时区的时间戳-整数提示:不匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置: …$ l: B8 `; _9 ^- T
类型转换的在线指南绝对无济于事。输入表示赞赏。
7 N$ Z7 {, M% v- n; D( Q                                                                " p" F0 {7 F  \% m, f3 G7 C  s
    解决方案:                                                               
. C  {6 P7 K5 i0 b- N, y                                                                使用INTERVAL例如:
6 u3 u& [5 z7 K+ i; j; x--yesterdaySELECT NOW() - INTERVAL '1 DAY';--Unrelated to the question,but PostgreSQL also supports some shortcuts:SELECT 'yesterday'::TIMESTAMP,'tomorrow'::TIMESTAMP,'allballs'::TIME;然后,您可以执行以下操作:! s9 x, D8 y, s, o7 @  K
SELECT     org_id,   count(accounts) AS COUNT,   ((date_at) - INTERVAL '1 DAY') AS dateatFROM     sourcetableWHERE     date_at 尖端秘诀1您可以添加多个操作数。例如:如何获得当月的最后一天?
! A. o% X8 M2 W: OSELECT date_trunc('MONTH',CURRENT_DATE)   INTERVAL '1 MONTH - 1 DAY';秘诀2你也可以用make_interval函数创建间隔,在运行时需要创建间隔时有用(不使用文本):
# Y  u! b6 `9 |5 X3 q% m' k0 ISELECT make_interval(days => 10   2);SELECT make_interval(days => 1,hours => 2);SELECT make_interval(0,1,0,5,0,0,0.0);更多信息:日期/时间函数和运算符( M1 `. j( }$ M+ ?
datatype-datetime(特殊值)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则