我的查询从当前日期返回30天的数据,需要修改它才能返回当前月份的数据而不是当前日期的30天
SELECT count(1)AS counter FROM users.logged WHERE createddate> = date_trunc('month',CURRENT_DATE);
基于Postgres的任何提示如何调整此查询
问候
答案 0 :(得分:8)
这样的事情应该有效。
SELECT count(1) AS counter
FROM users.logged
WHERE date_trunc('month', createddate) = date_trunc('month', current_date);
答案 1 :(得分:1)
已经应该返回当月的值。截断执行转换10 Nov 2013 14:16 -> 01 Nov 2013 00:00
,它将返回自本月初以来的数据。问题似乎是另一回事。
答案 2 :(得分:1)
我的查询从当前日期返回30天的数据,需要修改它才能返回当前月份的数据而不是当前日期的30天
这是不正确的。您的查询:
SELECT count(1) AS counter FROM users.logged WHERE createddate >= date_trunc('month', CURRENT_DATE);
返回所有日期> = 11月1日00:00:00,换句话说,您所说的已经是您想要的。或者,您已经简化了查询并省略了更重要的部分 - 那些被破坏的部分。如果不是:
它可能是你未来的日期,并且你得到的结果不正确。如果是,请在where子句中添加其他条件:
AND created_date < date_trunc('month', CURRENT_DATE) + interval '1 month'
它可能也是你的样本数据有一个奇怪的行,带有一个时区,看起来时间戳是从这个月开始的,但是日期/时间算术是在上个月降落的。
答案 3 :(得分:0)
这只会为您提供当月的数据。我尝试提取month
和year
。最后一步是您可以将创建日期与当前日期时间进行比较。
SELECT count(1) AS counter
FROM users.logged
WHERE
EXTRACT(MONTH FROM createddate) = EXTRACT(MONTH FROM current_date)
AND EXTRACT(YEAR FROM createddate) = EXTRACT(YEAR FROM current_date);