функция оракула, как days360 в Excel - PullRequest
1 голос
/ 11 июня 2010

Существуют ли какие-либо функции оракула, которые будут возвращать количество дней между двумя датами, например, функция days360 в Excel?


DAYS360: «Возвращает количество дней между двумя датами на основе 360-дневного года (двенадцать 30-дневных месяцев), который используется в некоторых бухгалтерских расчетах. Используйте эту функцию, чтобы помочь вычислить платежи, если ваша учетная система основана на двенадцати 30-дневных месяцев.

Если начальной датой является последний день месяца, он становится равным 30-му числа того же месяца. Если конечной датой является последний день месяца, а начальная дата раньше, чем 30-е число месяца, конечная дата становится равной 1-му числа следующего месяца; в противном случае дата окончания становится равной 30 числам того же месяца. "

1 Ответ

4 голосов
/ 11 июня 2010

В Oracle мы можем сделать простую арифметику по датам. В качестве альтернативы, мы можем превратить разницу в тип ИНТЕРВАЛ:

SQL> select id
  2         , start_date
  3         , end_date
  4         , (end_date - start_date) as arith_diff
  5         , (end_date - start_date) DAY TO SECOND as ds_interval
  6  from t42
  7  /


    ID START_DATE           END_DATE             ARITH_DIFF DS_INTERVAL
------ -------------------- -------------------- ---------- --------------------
   111 11-FEB-2010 05:44:52 01-MAR-2010 08:10:18 18.1009954 +18 02:25:26.000000
   222 15-APR-2010 10:50:46 19-MAY-2010 01:44:08 33.6203935 +33 14:53:22.000000
   333 01-JUN-2010 00:00:00 31-AUG-2010 00:00:00         91 +91 00:00:00.000000
   444 11-FEB-2010 00:00:00 01-MAR-2010 00:00:00         18 +18 00:00:00.000000

SQL>

редактировать

"в функции days360 возвращает 20. в ваш код это 18.10. что я хочу это функция, которая должна работать точно как days360 "

Хорошо, функция Excel days360() вычисляет разницу между двумя датами на основе года из двенадцати тридцати дней. Нет встроенного Oracle, который делает это. Фил Сингер написал свою собственную реализацию PL / SQL: найдите его здесь . Также обязательно прочитайте его последующую часть . Конечно, функция Фила дает желаемые результаты:

SQL> select id
  2         , start_date
  3         , end_date
  4         , days360(start_date, end_date) as days360
  5  from t42
  6  /

        ID START_DATE           END_DATE                DAYS360
---------- -------------------- -------------------- ----------
       111 11-FEB-2010 05:44:52 01-MAR-2010 08:10:18         20
       222 15-APR-2010 10:50:46 19-MAY-2010 01:44:08         34
       333 01-JUN-2010 00:00:00 31-AUG-2010 00:00:00         90
       444 11-FEB-2010 00:00:00 01-MAR-2010 00:00:00         20

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