Существует действительно не формат даты по умолчанию для продукта, reference guide утверждает, что по умолчанию для NLS_DATE_FORMAT
на системном уровне основан на NLS_TERRITORY
. Хотя this говорит, что «стандарт» - это «DD-MON-RR», и я думаю, что это то, что вы получаете, если не укажете значение на уровне базы данных, по крайней мере, на платформах, над которыми я работал.
При создании новой базы данных параметры инициализации могут включать в себя конкретный NLS_DATE_FORMAT
и которые также могут быть изменены позже.
Но системный уровень NLS_DATE_FORMAT
может быть переопределен клиентом, сеансом или вызовом TO_CHAR
. Вы можете посмотреть в v$nls_parameters
, чтобы увидеть системное значение, и nls_session_parameters
, чтобы увидеть текущее значение сеанса. Вы можете изменить это с помощью alter session
, если хотите.
Я уверен, вы обнаружите, что разработчик PL/SQL устанавливает сеанс NLS_DATE_FORMAT
в MM/DD/YYYY
где-то в своих предпочтениях.
Как правило, лучше не полагаться на это значение вообще и всегда использовать явную форму маску для отображения, например. TO_CHAR(<column>, 'YYYY-MM-DD HH24:MI:SS')
.
В руководстве по глобализации больше NLS_DATE_FORMAT
here и here; и немного о дате отображения here; и обзор элементов модели формата даты here
Если это так, то почему я должен использовать конкретный формат при сравнении дат: например. выберите si.effective_date из search_instance si, где si.effective_date> '26 -JUN-2013 ', по si.effective_date. Если вместо '26 -JUN-2013 'я использую '06/26/2013', он скажет «Недействительный месяц». – user204069
Я стараюсь использовать всегда формат даты ansi: «YYMMDDHHMISS» с этим, мне не нужно проверять, какой формат использует БД. Тогда я могу использовать что-то вроде 'si.effective_date> '20130626000000'' – Aguardientico