我试图查询我的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号等等混在一起.


这种 struct 还有一个优点,就是能够保持索引的使用.


许多人可能会建议使用以下形式,但他们使用do not个索引:

WHERE
      DATEPART('year',  login_date) = 2014
  AND DATEPART('month', login_date) = 2

这涉及到计算表中每一行的条件(扫描),而不是使用索引来查找将匹配的行范围(范围搜索).

Sql相关问答推荐

识别顺序记录组

查询将查找将标记设置为user2的用户

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

如何计算一个用户S的日常连胜?

PostgreSQL:按小时查看调整日期

数组列的postgres更新查询

动态组/转置

SQL到Snowflake-转换嵌套的SELECT(值

优化Postgres搜索未知长度的子串

如何使用聚合连接两个表

在 PostgreSQL 中使用 ltree 列进行累积

查询以从时间范围列表中查找唯一时间段

DB2 SQL查询结果多余数据

用替代方案替换 SQL Cursor 以提高性能

统计重复记录的总数

在自引用表中使用分组和计数的SQL查询语句

如何使用SQL将患者平均分配给他们所在地区的doctor

如何通过CROSS APPLY获取多级嵌套JSON属性的值?

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84