Как конвертировать Date-time в Date с помощью Netezza

Я делаю некоторые вычисления, но мой расчет отключен, потому что в поле даты отображается метка времени, и я хочу использовать только дату, только когда делаю расчет. Как я могу просто проигнорировать минуты и просто использовать дату при расчете? Вот что я имею:

SELECT EF.DSCH_TS, CASE WHEN EXTRACT (DAY FROM EF.DSCH_TS - EF.ADMT_TS)>=0 THEN 'GroupA' END AS CAL FROM MainTable EF; 

Вы можете захотеть переписать инструкцию case, чтобы вернуть интервал . Это позволит немного повысить гибкость.

  SELECT EF.DSCH_TS, CASE WHEN age(date(EF.DSCH_TS),date(EF.ADMT_TS))>= interval '6 days' THEN 'GroupA' END AS CAL FROM MainTable EF; 

Netezza имеет встроенную функцию для этого, просто используя:

 SELECT DATE(STATUS_DATE) AS DATE, COUNT(*) AS NUMBER_OF_ FROM X GROUP BY DATE(STATUS_DATE) ORDER BY DATE(STATUS_DATE) ASC 

Это вернет только часть даты timetamp и гораздо более полезную, чем приведение ее в строку с TO_CHAR() поскольку она будет работать в GROUP BY , HAVING и других функциях даты netezza. (Где, как метод TO_CHAR , не будет)

Кроме того, DATE_TRUNC() вытаскивает определенное значение из отметки времени («День», «Месяц», «Год» и т. Д.), Но не более одного из них без нескольких функций и объединяется.

DATE () – идеальный и простой ответ на это, и я удивлен, увидев так много вводящих в заблуждение ответов на этот вопрос в Stack. Я много вижу TO_DATE , что является функцией Oracle для этого, но не будет работать на Netezza .

По вашему запросу, предполагая, что вас интересуют дни с полуночи до полуночи двух временных меток, это выглядит примерно так:

 SELECT EF.DSCH_TS, CASE WHEN EXTRACT (DAY FROM (DATE(EF.DSCH_TS) - DATE(EF.ADMT_TS)))>=0 THEN 'GroupA' END AS CAL FROM MainTable EF; 

Используйте date_trunc() с первым аргументом 'day' . Я думаю, это то, что вы хотите:

 SELECT EF.DSCH_TS, (case when date_trunc('day', EF.DSCH_TS) >= date_trunc('day', EF.ADMT_TS) THEN 'GroupA' END) AS CAL FROM MainTable EF;