NZ-SQL Выберите последний день текущего года

Все.

Попытка найти способ найти последний день текущего года в Netezza SQL. Для T-SQL я использовал SELECT DATEADD(MS,-3,DATEADD(YY, DATEDIFF(YY,0,GETDATE() )+1, 0)), но у меня есть мозги, чтобы сделать его для NZ-SQL.

Спасибо!


person cryocaustik    schedule 15.11.2014    source источник


Ответы (2)


Следующее работает в Postgres, поэтому я подозреваю, что оно должно работать и в Netezza:

select current_date - extract(doy from current_date) * interval '1 day' + interval '1 year'

Идея состоит в том, чтобы вычесть текущий день года из текущей даты. Это дает вам последний день предыдущего года. Затем добавьте интервал в один год.

РЕДАКТИРОВАТЬ:

Вот та же идея, но другая реализация:

select add_months(current_date - extract(doy from current_date), 12) 

Или в отчаянии

select to_date(cast(extract(year from current_date)*100000 + 1231) as varchar(255)), 'YYYYMMDD')

РЕДАКТИРОВАТЬ II:

Кстати, в SQL Server можно использовать такое выражение:

select dateadd(year, 1, cast(datename(year, getdate()) as datetime) - 1)

Когда вы приводите строку, которая выглядит как год, к дате/времени, вы получаете первый день года.

person Gordon Linoff    schedule 15.11.2014
comment
К сожалению, когда я запускаю ваш код, я получаю следующее: ОШИБКА [42S22] ОШИБКА: атрибут «ИНТЕРВАЛ» не найден - person cryocaustik; 15.11.2014
comment
Это сработало: выберите add_months(current_date - extract(doy from current_date), 12) Спасибо!!! Наверное, просто вечер пятницы, от которого у меня застрял мозг. С остальным постараюсь разобраться позже. Спасибо еще раз! - person cryocaustik; 15.11.2014

И еще один, с использованием date_trunc, на всякий случай.

выберите date_trunc('год',текущая_дата) + интервал '1 год' - интервал '1 день';

person ScottMcG    schedule 15.11.2014
comment
СПАСИБО! Это помогло мне решить другую проблему (последний день предыдущего месяца с использованием -3 миллисекунды) - person cryocaustik; 17.11.2014