Не могу навсегда изменить формат SYSDATE
Я хочу изменить формат даты Oracle Теперь это ДД / ММ / ГГГГ, я хочу изменить его на ММ / ДД / ГГГГ
Я использовал простой код (спасибо, Google)
ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH24:MI';
select sysdate from dual;
Проблема в том, что когда я отключаюсь и снова подключаюсь, изменения отменяются,
Любая помощь?
Основное изменение заключается в том, чтобы Oracle принял дату вставки в формате ММ / ДД / ГГГГ
заранее спасибо
3 ответа
Вы можете установить этот формат также в вашем реестре на
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_{Oracle Home Name}\NLS_DATE_FORMAT
,
соответственно
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle Home Name}\NLS_DATE_FORMAT
Пример для этого из командной строки:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1" /v NLS_DATE_FORMAT /t REG_SZ /d "MM/DD/YYYY HH24:MI" /f
Другая возможность состоит в том, чтобы установить значение в качестве переменной среды, например:
set NLS_DATE_FORMAT="MM/DD/YYYY HH24:MI"
Обратите внимание, что переменная среды имеет приоритет над настройками реестра.
Но имейте в виду, они просто определяют значение по умолчанию NLS_DATE_FORMAT
, Это может быть изменено ALTER SESSION SET NLS_DATE_FORMAT = ...
Команда в любое время.
Как вы видите в своей команде, вы меняете сессию. Таким образом, после повторного подключения у вас есть новый сеанс, который получает настройки сервера. Для лучшего понимания, пожалуйста, прочитайте: https://docs.oracle.com/cd/A87860_01/doc/server.817/a76966/ch2.htm
Я бы рекомендовал вставлять даты всегда с to_date(data_string,'MM/DD/YYYY HH24:MI')
и не верьте, что NLS не изменится.
Если вы используете SQL*Plus, вы можете добавить команду для установки nls_date_format в файлах glogin.sql или login.sql - см. Это полезное руководство.
Однако, если вы требуете "разрешить Oracle принимать дату вставки в формате MM/DD/YYYY", почему бы просто не преобразовать строку в дату при ее вставке, например:
insert into some_table (id, date_col)
values (1, to_date('10/25/2016', 'mm/dd/yyyy'));
Таким образом, вам не нужно беспокоиться о проблемах форматирования; это будет автоматически в правильном формате.
Сделайте ALTER SYSTEM вместо SESSION:
ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY' scope=both;
или:
ALTER SYSTEM SET NLS_DATE_FORMAT='MM/DD/YYYY';
Больше информации здесь.