Как я могу преобразовать следующий Oracle преобразование в Teradata:дата Teradata время вычитания и преобразования
select
round((current_timestamp - ah.adate) - (ah.ahdate-ah.adate),1)
,round(ah.ahdate-ah.addate,1)
from actions ah
Как я могу преобразовать следующий Oracle преобразование в Teradata:дата Teradata время вычитания и преобразования
select
round((current_timestamp - ah.adate) - (ah.ahdate-ah.adate),1)
,round(ah.ahdate-ah.addate,1)
from actions ah
Я считаю, что один из последующих сравнений должны работать в 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
@ robpaller. Я хочу, чтобы результаты отображались как десятичные знаки – user3438498
Это уродливое как грех, но это даст вам количество дней в одно десятичное место из вычитания двух интервалов.
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.
результат затем округляется.
Возможно, существует менее привлекательный способ, но я еще не открыл его.
использовано это решение: , отделка (ABS ((CAST (ah.ahdate AS DATE) - CAST (ah.adate А.С. ДАТА)))) , (литой (обрезки (ABS ((Extract (час от ах .ahdate)) - abs (EXTRACT (HOUR FROM ah.adate)))) как varchar (10)))/24
Это недопустимый SQL. Какие типы данных есть? Сроки? Timestamps? Что здесь делает функция «ROUND»? – JNevill
@Jnevill Это временные метки: ahdate: 2015-04-10 07: 08: 34.000 \t adate: 2015-04-09 16: 30: 14.000 Я понятия не имею о круглой функции. Его запрос оракула – user3438498