|
我正在使用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(特殊值)。 |
|