После выполнения этого SQL в оракуле 10g:
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
Я получаю этот странный вывод:
В чем причина разницы во времени? Время сервера равно значению SYSDATE
После выполнения этого SQL в оракуле 10g:
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
Я получаю этот странный вывод:
В чем причина разницы во времени? Время сервера равно значению SYSDATE
CURRENT_DATE
и CURRENT_TIMESTAMP
вернуть текущую дату и время в часовом поясе сеанса.
SYSDATE
и SYSTIMESTAMP
вернуть системную дату и время, то есть система, в которой находится база данных.
Если ваш клиентский сеанс не находится в том же часовом поясе, что и сервер, на котором находится база данных (или говорит, что это не так, с помощью настроек NLS), смешение функций SYS*
и CURRENT_*
приведет к возврату разных значений, Они все правильные, они просто представляют разные вещи. Похоже, ваш сервер (или думает, что он есть) в часовом поясе +4: 00, а ваш клиентский сеанс находится в часовом поясе +4: 30.
Вы также можете увидеть небольшие различия во времени, если часы не синхронизированы, что, похоже, не является проблемой.
SYSDATE
, SYSTIMESTAMP
возвращает дату базы данных и временную метку, тогда как current_date
, current_timestamp
возвращает дату и временную метку местоположения, из которого вы работаете.
Например, работая из Индии, я обращаюсь к базе данных, расположенной в Париже. в 16:00 IST:
select sysdate,systimestamp from dual;
Это возвращает мне дату и время Парижа:
РЕЗУЛЬТАТ
12-MAY-14 12-MAY-14 12.30.03.283502000 PM +02:00
select current_date,current_timestamp from dual;
Это возвращает мне дату и время Индии:
РЕЗУЛЬТАТ
12-MAY-14 12-MAY-14 04.00.03.283520000 PM ASIA/CALCUTTA
Обратите внимание на разницу во времени 3:30.
SYSDATE возвращает системную дату системы, в которой находится база данных
CURRENT_TIMESTAMP возвращает текущую дату и время в часовом поясе сессии, значение типа данных TIMESTAMP WITH TIME ZONE
выполнить это comman
ALTER SESSION SET TIME_ZONE = '+3:0';
и он предоставит вам тот же результат.
SYSDATE
предоставляет дату и время сервера.CURRENT_DATE
предоставляет дату и время клиента (т.е. ваша система)CURRENT_TIMESTAMP
предоставляет данные и временную метку клиники.Примечание: SYSDATE - возвращает только дату, т.е. "yyyy-mm-dd" неверна. SYSDATE возвращает системную дату сервера базы данных, включая часы, минуты и секунды. Например:
SELECT SYSDATE FROM DUAL; будет возвращать вывод, похожий на следующее: 12/15/2017 12:42:39 PM
SYSDATE
, systimestamp
возвращает дату и время сервера, на котором установлена база данных. SYSDATE
- возвращает только дату, т.е. "yyyy-mm-dd". systimestamp
возвращает дату со временем и зоной, то есть "yyyy-mm-dd hh: mm: ss: ms timezone" now()
возвращает datetime при выполнении инструкции времени, т.е. "yyyy-mm-dd hh: mm: ss" CURRENT_DATE
- "yyyy-mm-dd", CURRENT_TIME
- "hh: mm: ss", CURRENT_TIMESTAMP
- "yyyy-mm-dd hh: mm: ss timezone". Они связаны с временем ввода записи.