询问 Postgresql 乘DAT。

我想请求我的数据库 postgresql, 返回结果,日期在某个月份和年份。 换句话说,我想获得月份的所有价值观。

到目前为止,我设法这样做是这样的:


SELECT user_id 
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-02-28'


此问题的问题是我必须在请求表之前计算第一个日期和最后一个日期。 是否有更容易的方法来做呢?

已邀请:

帅驴

赞同来自:

约会 /和时间/ 如果您使用,许多事情会更轻松
>= start AND < end

.

例如:


SELECT
user_id
FROM
user_logs
WHERE
login_date >= '2014-02-01'
AND login_date < '2014-03-01'


在这种情况下,您仍然需要计算所需月份的开始日期,但这应该以任何数量的方式简单。

最后日期也是简化的; 只需添加一个月即可。 不要联系28号,第30页,第31页等等。


这种结构还具有它可以支持使用索引的优点。


许多人可以提供这样一种形式,但他们

不是

使用索引:


WHERE
DATEPART/'year', login_date/ = 2014
AND DATEPART/'month', login_date/ = 2


这包括计算表中每个单独字符串的条件。 /扫描/ 而不是使用索引来搜索将重合的字符串范围 /搜索范围/.

董宝中

赞同来自:

支持的
https://www.postgresql.org/doc ... .html
经过 PostreSQL 9.2. 所以你可以像这样写作:


SELECT user_id
FROM user_logs
WHERE '[2014-02-01, 2014-03-01]'::daterange @> login_date


它应该比一行比较更有效

石油百科

赞同来自:

以防万一,如果有人降落在这里...... 8.1 您可以简单地使用:


SELECT user_id 
FROM user_logs
WHERE login_date BETWEEN SYMMETRIC '2014-02-01' AND '2014-02-28'


来自文件:

对称之间的对称相同 BETWEEN, 除了没有
对左侧的论证的要求 AND 不太平等
右边的论点。 如果不是,那么这两个参数
自动更改位置,因此非空的范围始终是指。

知食

赞同来自:

SELECT user_id 
FROM user_logs
WHERE login_date BETWEEN '2014-02-01' AND '2014-03-01'


关键词 Between 专门用于约会。 他假设时间为日期00:00:00 /那是午夜/.

涵秋

赞同来自:

阅读文档。

http://www.postgresql.org/docs ... .html
我使用过这样的请求:


WHERE
/
date_trunc/'day',table1.date_eval/ = '2015-02-09'
/


或者


WHERE/date_trunc/'day',table1.date_eval/ >='2015-02-09'AND date_trunc/'day',table1.date_eval/ <'2015-02-09'/


Juanitos Ingenier.

要回复问题请先登录注册