Дано: PostgreSQL, Таблица, где один из столбцов, - дата и время (тип timestamp without time zone). Пусть он называется fdt.
Требуется посчитать все записи, за определённый месяц данного года. Пусть, октябрь 2012го.
Решение: 3 варианта
1.
SELECT COUNT(*) FROM table WHERE date_part('month', fdt) = 10 AND date_part('year', fdt) = 2012 ;
2.
SELECT COUNT(*) FROM table WHERE EXTRACT(MONTH FROM fdt) = 10 AND EXTRACT(YEAR FROM fdt) = 2012;
3.
SELECT COUNT(*) FROM table WHERE fdt >= '2012-10-01' AND fdt < '2012-11-01';
Третий вариант, в среднем, несколько быстрее первых двух. Так, на одной и той-же таблице, варианты 1. и 2. обрабатывают 22806 записей за ~80 ms (вариант 2 показывал больший разброс, чем 1), а вариант 3 ~60ms.