PostgreSQL:无需列比较,如何统计当前月份交易记录行数?
PostgreSQL统计当月记录行数的简洁写法
PostgreSQL没有完全无需与transaction_date列做比较的内置统计方法——毕竟数据库得明确依据哪个字段筛选当月数据。不过可以用更简洁的日期函数替代手动计算当月首尾日期的写法,让代码更易读、更严谨:
方法一:使用date_trunc截断日期到月份
把交易日期和当前日期都截断到「月份」维度,直接对比是否属于同一月份:
SELECT COUNT(*) FROM table_name WHERE date_trunc('month', transaction_date) = date_trunc('month', CURRENT_DATE);
方法二:使用EXTRACT提取年月信息
分别提取交易日期和当前日期的年份、月份,再进行匹配:
SELECT COUNT(*) FROM table_name WHERE EXTRACT(YEAR FROM transaction_date) = EXTRACT(YEAR FROM CURRENT_DATE) AND EXTRACT(MONTH FROM transaction_date) = EXTRACT(MONTH FROM CURRENT_DATE);
补充说明
相比你原来用BETWEEN的写法,这两种方式能避免时间边界问题:比如如果transaction_date包含时分秒,BETWEEN '当月第一天' AND '当月最后一天'会漏掉当月最后一天中晚于00:00:00的记录,而上面的两种写法则不会有这个问题。
内容的提问来源于stack exchange,提问作者Purushottam Nawale
相关产品推荐
相关产品推荐

