Как получить запись на основе текущего месяца и года из столбца отметок времени в oracle?
Используйте фильтр в столбце TIMESTAMP
, чтобы установить верхнюю и нижнюю границы. Для нижней границы вы можете TRUNC
съесть текущую дату до начала месяца, а для верхней границы вы можете сделать то же самое и добавить месяц:
SELECT payment_time
FROM CPDB_TEST_REPORTS.T_X_G2P_EXE_REPORT_N
WHERE G2PORG_SHORTCODE = '00164752'
AND payment_time >= TRUNC( SYSDATE, 'MM' )
AND payment_time < ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 )
Вы также можете использовать TRUNC
для столбца payment_time
(однако, Oracle не будет использовать индекс для столбца payment_time
и потребуется отдельный индекс на основе функций для TRUNC( payment_time )
):
SELECT payment_time
FROM CPDB_TEST_REPORTS.T_X_G2P_EXE_REPORT_N
WHERE G2PORG_SHORTCODE = '00164752'
AND TRUNC( payment_time, 'MM' ) >= TRUNC( SYSDATE, 'MM' )
Если ваш Столбец payment_time
на самом деле не является типом данных TIMESTAMP
, но представляет собой VARCHAR2
, тогда вы можете использовать точно такой же метод и просто преобразовать значения фильтра в строку чисел:
SELECT payment_time
FROM CPDB_TEST_REPORTS.T_X_G2P_EXE_REPORT_N
WHERE G2PORG_SHORTCODE = '00164752'
AND payment_time >= TO_CHAR( TRUNC( SYSDATE, 'MM' ), 'YYYYMMDDHH24MISS' )
AND payment_time < TO_CHAR( ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 ), 'YYYYMMDDHH24MISS' )