Эта функция не существует в Oracle RDMBS; это явно было в Oracle Lite (с которым я никогда не сталкивался), и я считаю, что это в других базах данных, таких как MySQL.
Существует документация, покрывающая datetime and interval arithmetic, которая поможет вам в этом. вы можете либо вычесть одну временную метку из другой; или одна дата от другой, или смесь из двух - но проще придерживаться одного типа данных. В зависимости от которых вы используете вы либо получите интервал или число, представляющее собой количество дней:
SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;
CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000
SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;
CURRENT_DATE-DATE'1998-12-09'
-----------------------------
6169.67775
Если вы просто хотите, количество полных дней вы можете использовать extract()
для интервала, чтобы получить только элемент, который вы хотите или trunc()
для числа, чтобы удалить дробную часть:
SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;
EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
6169
SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;
TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
6169
вы также можете trunc()
текущую дату до сравнения, если вы предпочитаете, так что вы сравниваете как в полночь, а это означает, что не будет дробным дневная часть для удаления:
SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;
TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
6169
Я использовал литералы даты ANSI для фиксированной даты, но вы можете использовать существующую дату или временную переменную или столбец; или to_date()
или to_timestamp()
, если у вас есть строка в другом формате.
Вы также можете использовать extract()
для преобразования компонентов интервальных к общей величине, as shown here; а также убедитесь, что вы знаете разницу между current_date
and sysdate
, and the timestamp equivalents.
У вас есть столбец CURRENT_DATE или вы хотите использовать SYSDATE? – Mihai
@Mihai: 'CURRENT_DATE' действителен в 11g. Он похож на 'SYSDATE', но чувствителен к часовому поясу сеанса. – Allan
Изучение чего-то нового повседневного @Allan – Mihai