Как сделать расчет с использованием формата даты в Oracle SQL - PullRequest
0 голосов
/ 26 февраля 2019

Ценю вашу помощь по приведенному ниже вопросу, я долго борюсь за этот вопрос.Пожалуйста, посмотрите на пример ниже.

(SELECT MIN(CASE WHEN SI.DATE_STAT >= 78000000000000000 AND 
            SUBSTR(DIGITS(SI.DATE_STAT),5,2) BETWEEN '01' AND '12' AND 
            SUBSTR(DIGITS(SI.DATE_STAT),9,1) BETWEEN '0' AND '3' AND 
            INT(SUBSTR(DIGITS(SI.DATE_STAT),7,2)) BETWEEN 1 AND 
            DAY(DATE(CAST(19+INT(SI.DATE_STAT / 100000000000000000) AS CHAR(2)) || 
            TRANSLATE('YE-MN-01', DIGITS(SI.DATE_STAT), 'xxYEMNDA')) + 1 MONTH - 1 DAY)
            THEN TIMESTAMP(CAST(19+INT(SI.DATE_STAT / 100000000000000000) AS CHAR(2)) || 
            TRANSLATE('YE-MN-DA HR:UT:SC', DIGITS(SI.DATE_STAT),'xxYEMNDAxHRUTSC')) - 
            INT(MOD(3 - INT(SUBSTR(DIGITS(SI.DATE_STAT),9,1)),3)) DAYS + 
            INT(MOD(INT(SUBSTR(DIGITS(SI.DATE_STAT),16,2)) - 1,25) + 1) HOURS + 
            INT(MOD(4 - ((INT(SUBSTR(DIGITS(SI.DATE_STAT),16,2)) - 1) / 25),4) * 15) 
            MINUTES ELSE CAST(NULL AS TIMESTAMP)END) 
        FROM EXPORT.STAT_ITEM SI
        WHERE (SI.INVOICE_REF = SH.SHPMNT_REF) AND SI.STAT_CODE = 'ABC') AS ABC,

         (SELECT MIN(CASE WHEN SI.DATE_STAT >= 78000000000000000 AND 
            SUBSTR(DIGITS(SI.DATE_STAT),5,2) BETWEEN '01' AND '12' AND 
            SUBSTR(DIGITS(SI.DATE_STAT),9,1) BETWEEN '0' AND '3' AND 
            INT(SUBSTR(DIGITS(SI.DATE_STAT),7,2)) BETWEEN 1 AND 
            DAY(DATE(CAST(19+INT(SI.DATE_STAT / 100000000000000000) AS CHAR(2)) || 
            TRANSLATE('YE-MN-01', DIGITS(SI.DATE_STAT), 'xxYEMNDA')) + 1 MONTH - 1 DAY)
            THEN TIMESTAMP(CAST(19+INT(SI.DATE_STAT / 100000000000000000) AS CHAR(2)) || 
            TRANSLATE('YE-MN-DA HR:UT:SC', DIGITS(SI.DATE_STAT),'xxYEMNDAxHRUTSC')) - 
            INT(MOD(3 - INT(SUBSTR(DIGITS(SI.DATE_STAT),9,1)),3)) DAYS + 
            INT(MOD(INT(SUBSTR(DIGITS(SI.DATE_STAT),16,2)) - 1,25) + 1) HOURS + 
            INT(MOD(4 - ((INT(SUBSTR(DIGITS(SI.DATE_STAT),16,2)) - 1) / 25),4) * 15) 
            MINUTES ELSE CAST(NULL AS TIMESTAMP)END) 
        FROM EXPORT.STAT_ITEM SI
        WHERE (SI.INVOICE_REF = SH.SHPMNT_REF) AND SI.STAT_CODE = 'DEF') AS DEF,

//This should be wrong and I'm getting error.
coalesce((days(DEF) -  days(ABC)),'0') as TotalTransitTime

Я хочу показать дату между "DEF" и "ABC", и по умолчанию будет 0, если DEF или ABC отсутствуют.Пожалуйста помоги.Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...