2016-10-24 3 views
0
elseif (p_period = 'LAST2CALENDARMONTHS') then 
     lMonthInt := 2; 

     lLastDay := date_trunc('month',current_date - interval '1 month') + INTERVAL '1 month - 1 day' + (interval '1 day - 1 second'); 
     lFirstDay := date_trunc('month',current_date - (lMonthInt*INTERVAL '1 month')); 

    elseif (p_period = 'LAST3CALENDARMONTHS') then 
     lMonthInt := 3; 

     lLastDay := date_trunc('month',current_date - interval '1 month') + INTERVAL '1 month - 1 day'+ (interval '1 day - 1 second'); 
     lFirstDay := date_trunc('month',current_date - (lMonthInt*INTERVAL '1 month')); 

Используя Postgresql, приведенный выше код преобразует строку в FromDate и Todate, например, когда я называю LAST2CALENDARMONTHSPostgresql: Отметка из строки

Он будет отображать FromDate: «2016-08- 01 00:00:00" Todate: „2016-09-30 23:59:59“

Я хочу сделать то же самое для звонков в любой месяц года, к примеру, призывающей ЯНВАРЬ Результаты ш ульд быть:

FromDate: "2016-01-01 00:00:00" Todate: "2016-01-31 23:59:59"

ли что-то подобное возможно?

ответ

2

Чтобы получить первые и последние дни января текущего года использования:

elseif (p_period = 'JANUARY') then 
    lFirstDay := make_timestamp(date_part('year', current_date)::int, 1, 1, 0, 0, 0); 
    lLastDay := lFirstDay + interval '1 month' - interval '1 second'; 

для PostgreSQL 9.3 и более ранних версий, где make_timestamp не существует, вы можете использовать

SELECT date_trunc('year', current_timestamp) + '0 months' 

, чтобы получить первый день января.

+0

я получаю это сейчас: –

+0

ОШИБКА: функция make_timestamp (целое число, целое число, целое число, целое число, целое число, целое) не существует LINE 1: SELECT make_timestamp (date_part ('год', текущая_дата) :: Int, .. –

+0

@Charlvanderbyl - Вы должны указать номер версии Postgres (если исторический). Спасибо Laurenz. – klin

Смежные вопросы