2015-04-15 2 views
0

Как я могу преобразовать следующий Oracle преобразование в Teradata:дата Teradata время вычитания и преобразования

select 
round((current_timestamp - ah.adate) - (ah.ahdate-ah.adate),1) 
,round(ah.ahdate-ah.addate,1) 
from actions ah 
+1

Это недопустимый SQL. Какие типы данных есть? Сроки? Timestamps? Что здесь делает функция «ROUND»? – JNevill

+0

@Jnevill Это временные метки: ahdate: 2015-04-10 07: 08: 34.000 \t adate: 2015-04-09 16: 30: 14.000 Я понятия не имею о круглой функции. Его запрос оракула – user3438498

ответ

0

Я считаю, что один из последующих сравнений должны работать в Teradata:

SELECT Current_Timestamp - CAST(ah.addate AS TimeStamp(6)) DAY (4) TO SECOND(4) AS TimeInterval 
    , Current_Date - CAST(ah.addate AS DATE) DAY(4) AS DayInterval /* May Not be necessary as two dates can be subtracted/added without INTERVAL */ 
    , Current_Date - ah.addate AS DayDifference /* If AdDate is a DATE in Teradata */ 
FROM actions ah 

EDIT: Разделите разницу между секундами между метками времени, а затем используйте математику для расчета дней между двумя временными метками как FLOAT.

SELECT (((EXTRACT (DAY FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 86400) 
    + (EXTRACT (HOUR FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 3600) 
    + (EXTRACT (MINUTE FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 60) 
    + (EXTRACT (SECOND FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND))) AS FLOAT))/86400.00 
+0

@ robpaller. Я хочу, чтобы результаты отображались как десятичные знаки – user3438498

0

Это уродливое как грех, но это даст вам количество дней в одно десятичное место из вычитания двух интервалов.

SELECT 
    ROUND(
     STRTOK(CAST((TIMESTAMP '2017-04-17 07:08:34.000' - TIMESTAMP '2015-04-09 16:30:14.000' DAY(4) TO HOUR) AS VARCHAR(10)),' ',1) + 
     (STRTOK(CAST((TIMESTAMP '2017-04-17 07:08:34.000' - TIMESTAMP '2015-04-09 16:30:14.000' DAY(4) TO HOUR) AS VARCHAR(10)),' ',2)/24) 
     ,1) 

Хитрость здесь в том, что, когда вы вычесть два TIMESTAMPs, что вы в конечном итоге с является тип INTERVAL данных. Мы преобразуем этот тип данных интервалов в HOUR, а затем произведем результаты как VARCHAR, который в этом примере выглядит как 738 15. Это 738 дней и 15 часов.

Используя STRTOK(), можно выделить дни (первый маркер), а затем добавить в количестве часов (второй лексем), деленное на 24.

результат затем округляется.

Возможно, существует менее привлекательный способ, но я еще не открыл его.

0

использовано это решение: , отделка (ABS ((CAST (ah.ahdate AS DATE) - CAST (ah.adate А.С. ДАТА)))) , (литой (обрезки (ABS ((Extract (час от ах .ahdate)) - abs (EXTRACT (HOUR FROM ah.adate)))) как varchar (10)))/24

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