В качестве объяснения по , почему ваш запрос не работает:
to_date('01-12-2018', 'dd-mm-yyyy')
создает значение date (даже если вы указали часть времени),поэтому, когда вы сравниваете это с отметкой времени, это как если бы вы сравнивали это со значением отметки времени, где часть времени установлена на 00:00:00
.
Таким образом, ваш первый запрос по сути такой же, как:
where "DateOfTransaction" >= timestamp '2018-12-01 00:00:00'
and "DateOfTransaction" <= timestamp '2018-12-01 00:00:00'
Который будет возвращать только те строки, которые содержат ровно 2018-12-01 00:00:00
Как это сделать правильно?
Вы можете просто привести метку времени к дате и сравнить еес =
where "DateOfTransaction"::date = date '2018-12-01'
, который не сможет использовать индекс для "DateOfTransaction"
Если вам нужно убедиться, что запрос использует индекс, вы можете использовать:
where "DateOfTransaction" >= DATE '2018-12-01'
and "DateOfTransaction" < DATE '2018-12-01' + 1
Обратите внимание, что приведение "DateOfTransaction"::timestamp
бесполезно, поскольку столбец уже является timestamp