|
我正在使用Datagrip for Postgresql。我有一个带有时间戳格式的日期字段表(ex: 2016-11-0100:00:00)
" O2 l! O8 b, _" o8 X/ I% d[ol]应用数学运算符减去1天
8 n; F5 O Q4 ?+ B5 _根据今天-窗口过滤130天9 t3 {& b! a; [9 q( w+ W
没有邮票hh / mm / ss部分显示(2016)-10-31)[/ol]当前的起始查询:+ U# a$ [5 O3 o1 Z+ `! R9 ~
select org_id,count(accounts) as count,((date_at) - 1) as dateat from sourcetable where date_at ((date_at)-1)第一行子句:1 |- Y! h5 ^/ W* C
[42883]错误:操作符不存在:没有时间戳-整数提示:没有操作符来匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置:69
% d- G6 @) d# ~, |+ B7 N# g该now()句子产生类似的消息:
3 M/ X" X d w+ P[42883]错误:运算符不存在:带时区的时间戳-整数提示:不匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置: …
: I* p$ `4 a+ X6 K0 T类型转换的在线指南绝对无济于事。输入表示赞赏。
( a6 O x. P2 l9 D ! o2 Y: B! P8 W* w" I
解决方案: 6 C# E# K3 G1 d( a N1 K* i
使用INTERVAL例如: f5 E5 K, Y) R* u& G5 Z
--yesterdaySELECT NOW() - INTERVAL '1 DAY';--Unrelated to the question,but PostgreSQL also supports some shortcuts:SELECT 'yesterday'::TIMESTAMP,'tomorrow'::TIMESTAMP,'allballs'::TIME;然后,您可以执行以下操作:7 a7 ~7 h; e. q5 w4 ]
SELECT org_id, count(accounts) AS COUNT, ((date_at) - INTERVAL '1 DAY') AS dateatFROM sourcetableWHERE date_at 尖端秘诀1您可以添加多个操作数。例如:如何获得当月的最后一天?% k! G- F2 n, `* I0 y6 t( `
SELECT date_trunc('MONTH',CURRENT_DATE) INTERVAL '1 MONTH - 1 DAY';秘诀2你也可以用make_interval函数创建间隔,在运行时需要创建间隔时有用(不使用文本):
7 P# l. K# g! r& p9 h2 x' D! H: D8 tSELECT make_interval(days => 10 2);SELECT make_interval(days => 1,hours => 2);SELECT make_interval(0,1,0,5,0,0,0.0);更多信息:日期/时间函数和运算符/ Z0 B# S: x& _+ g, f, I/ R# H
datatype-datetime(特殊值)。 |
|