Не могу навсегда изменить формат 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';

Больше информации здесь.

Другие вопросы по тегам