Вывести все счета в этом месяце - PullRequest
0 голосов
/ 04 ноября 2018

Я хочу вытащить все счета, выставленные за месяц, когда запускается отчет. Это должно быть просто, кое-что, что я пропускаю. Я нахожусь в базе данных ORACLE.

Я думаю:

Select * from Invoice inv 
WHERE inv.post_date between to_date ('FIRST_OF_THE_MONTH', 'MM/DD/YYYY') 
                        and to_date ('LAST_OF_THE_MONTH',  'MM/DD/YYYY')

конечно, FIRST_OF_THE_MONTH и LAST_OF_THE_MONTH не являются реальными вещами. право?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Вы должны быть очень осторожны при работе с date s в базах данных и, в частности, в Oracle. Oracle имеет компонент времени как часть типа данных date. По этой причине вам следует избегать between.

Вместо этого напишите логику как:

select i.*
from Invoice i 
where i.post_date >= trunc(sysdate, 'MON') and
      i.post_date < add_months(trunc(sysdate, 'MON'), 1);

Эта логика работает независимо от того, имеет ли post_date компонент времени или нет, поэтому он безопаснее.

0 голосов
/ 04 ноября 2018

Если вы хотите, чтобы последний месяц текущего месяца, вы можете использовать TRUNC и SYSDATE, чтобы получить начало месяца. Вы могли бы сделать:

Select * from Invoice inv 
WHERE inv.post_date between TRUNC( SYSDATE, 'MONTH' )
                        and ADD_MONTHS( TRUNC( SYSDATE, 'MONTH' ) + 1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...