J-K*_*-Ko 51 sql postgresql casting
我正在使用Datagrip for Postgresql.我有一个表格,其中包含时间戳格式的日期字段(ex: 2016-11-01 00:00:00).我希望能够:
当前开始查询:
select org_id, count(accounts) as count, ((date_at) - 1) as dateat
from sourcetable
where date_at <= now() - 130
group by org_id, dateat
Run Code Online (Sandbox Code Playgroud)
((date_at)-1)第1行的条款导致:
[42883]错误:运算符不存在:没有时区的时间戳 - 整数提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.位置:69
该now()子句产生了类似的信息:
[42883]错误:运算符不存在:带时区的时间戳 - 整数提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.职位:......
类型转换的在线指南非常无益.感谢投入.
Mic*_*zzi 119
使用INTERVAL它的类型.例如:
--yesterday
SELECT NOW() - INTERVAL '1 DAY';
--Unrelated to the question, but PostgreSQL also supports some shortcuts:
SELECT 'yesterday'::TIMESTAMP, 'tomorrow'::TIMESTAMP, 'allballs'::TIME;
Run Code Online (Sandbox Code Playgroud)
然后,您可以在查询中执行以下操作:
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;
Run Code Online (Sandbox Code Playgroud)
补充提示
您可以附加多个操作数.例如:如何获得当月的最后一天?
SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';
Run Code Online (Sandbox Code Playgroud)
GG.*_*GG. 21
您可以将 a 转换TIMESTAMP为 a DATE,这样您就可以从中减去 an INTEGER。
例如,要获取昨天:
now()::DATE - 1
Run Code Online (Sandbox Code Playgroud)
所以你的查询将变成:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73015 次 |
| 最近记录: |