2014-12-02 1 views
1

Я пытаюсь получить, в какой день квартала, когда вы даете текущую дату.получение числа дней в квартале Teradata

Для примера, если я даю 25.01.2012, тогда выход должен быть 25. Поскольку это 25-й день квартала.

Аналогичным образом, если я даю 02/01/2012, он должен дать 32 в качестве вывода.

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

Платформа Teradata. В календаре нет опции для day_of_quarter, и это то, что я ищу. Учитывая дату, мне нужно знать номер дня квартала.

Пожалуйста, помогите. Заранее спасибо.

+0

Какая версия Teradata? Является ли это стандартным календарем или кварталом бизнес-календаря? –

+0

Этот Teradata 14 – TD123

ответ

1

TRUNC(datecol) возвращает первый день квартала, date1 - date2 возвращает количество дней между:

SELECT (datecol - TRUNC(datecol, 'Q')) + 1 AS day_of_quarter 

Вы можете поместить этот расчет в SQL UDF или добавить его в качестве столбца в существующем календарь.

+0

Спасибо. Работает отлично! – TD123

+0

Как округление TRUNC() на 16-й день 2-го квартала влияет на это @dnoeth? –

+0

@RobPaller, мне тоже было интересно об этом. Я попробовал это с моим запросом ниже и получил те же результаты, что и оператор case. – Andrew

1

Это основано на календарном квартале. Вы можете настроить оператор case, если у вас есть какой-то бизнес-календарь.

select 
c.*, 
CASE WHEN MONTH(calendar_date) BETWEEN 1 AND 3 
     THEN CAST(((calendar_date/10000) * 10000) + 101 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 4 AND 6 
     THEN CAST(((calendar_date/10000) * 10000) + 401 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 7 AND 9 
     THEN CAST(((calendar_date/10000) * 10000) + 701 AS DATE) 
     WHEN MONTH(calendar_date) BETWEEN 10 AND 12 
     THEN CAST(((calendar_date/10000) * 10000) + 1001 AS DATE) 
END as First_Day_Of_Quarter, 
calendar_date - first_day_of_quarter + 1 as Day_Of_Quarter 
from 
sys_calendar.calendar c 
where 
year_of_calendar = 2014 
order by 1 asc 
+0

Спасибо, Андрей. Но я ищу, чтобы заменить calendar_date на дату из моей таблицы, и она не работает для этого. Это то, что я пытаюсь сделать: – TD123

+0

выберите \t CASE \t КОГДА МЕСЯЦ (отличное (DayDate as date))) МЕЖДУ 1 И 3 ТОГДА CAST (((cast (DayDate as date))/10000) * 10000) + 101 AS DATE) КОГДА МЕСЯЦ (cast (DayDate as date)) BETWEEN 4 AND 6 THEN CAST (((cast (DayDate as date))/10000) * 10000) + 401 AS DATE) КОГДА МЕСЯЦ (cast (DayDate as date))) МЕЖДУ 7 И 9 THEN CAST (((литой (Дата даты в день))/10000) * 10000) + 701 КАК ДАТА) КОГДА МЕСЯЦ (литой (день даты в качестве даты))) МЕЖДУ 10 И 12 THEN CAST (((литые (DayDate, как дата))/10000) * 10000) + 1001 AS DATE) END, как First_Day_Of_Quarter, DayDate- first_day_of_quarter + 1, как Day_Of_Quarter из LU_DayComplete – TD123

+0

Я получаю ошибку 5407: Недопустимая операция для DateTime и интервальных – TD123

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