【发布时间】:2011-07-24 20:12:56
【问题描述】:
SELECT Table.date FROM Table WHERE date > current_date - 10;
这适用于 PostgreSQL 吗?
【问题讨论】:
标签: sql postgresql
SELECT Table.date FROM Table WHERE date > current_date - 10;
这适用于 PostgreSQL 吗?
【问题讨论】:
标签: sql postgresql
是的,这在 PostgreSQL 中确实有效(假设列“date”的数据类型为 date)
你为什么不试试呢?
标准的 ANSI SQL 格式是:
SELECT Table.date
FROM Table
WHERE date > current_date - interval '10' day;
我更喜欢这种格式,因为它更容易阅读(但它与current_date - 10 相同)。
【讨论】:
interval '10 day' 是 Postgres 语法。 interval '10' day是基于SQL标准的语法,Postgres也支持
10,而不是9
http://www.postgresql.org/docs/current/static/functions-datetime.html 显示可用于处理日期和时间(和间隔)的运算符。
所以你想要
SELECT "date"
FROM "Table"
WHERE "date" > (CURRENT_DATE - INTERVAL '10 days');
上面的操作符/函数都有详细记录:
【讨论】:
我的测试(和PostgreSQL dox)的理解是引号需要与其他答案不同,并且还应该包括这样的“天”:
SELECT Table.date
FROM Table
WHERE date > current_date - interval '10 day';
在此处演示(您应该能够在任何 Postgres 数据库上运行它):
SELECT DISTINCT current_date,
current_date - interval '10' day,
current_date - interval '10 days'
FROM pg_language;
结果:
2013-03-01 2013-03-01 00:00:00 2013-02-19 00:00:00
【讨论】:
建议的答案似乎已经解决了这些问题。但作为补充,我建议使用 PostgreSQL 的 NOW() 函数。
SELECT Table.date
FROM Table
WHERE date > now() - interval '10' day;
此外,您甚至可以指定非常方便的时区。
NOW () AT TIME ZONE 'Europe/Paris'
【讨论】:
如果您想使用任何给定日期而不是当前日期,只需概括查询:
SELECT Table.date
FROM Table
WHERE Table.date > '2020-01-01'::date - interval '10 day'
【讨论】:
从 Postgres 9.4 开始,您可以使用 AGE 函数:
SELECT Table.date FROM Table WHERE AGE(Table.date) <= INTERVAL '10 day';
【讨论】:
我会检查数据类型。
current_date 具有“日期”数据类型,10 是数字,而 Table.date - 您需要查看您的表格。
【讨论】:
你也可以在之间使用:
SELECT Table.date
FROM Table
WHERE date between current_date and current_date - interval '10 day';
【讨论】:
between 必须首先具有最低值,所以这将作为SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date; 正确完成