Язык названий дат и месяцев в Oracle?

#string #oracle #datetime

#строка #Oracle #дата-время

Вопрос:

У меня есть varchar поле в моей таблице, которое содержит дату в формате: Dic 31 1999 12:00AM , которую обычно можно преобразовать без каких-либо проблем с помощью to_date настройки 'Mon DD YYYY HH:MIAM' .

Названия месяцев, конечно, могут быть на любом языке. Например, январь был бы Jan на английском и Ene на испанском языках.

Я полагаю, клиент Oracle подберет языковой стандарт компьютера, чтобы определить, какой язык является входящей строкой. Единственная проблема заключается в том, что это не всегда будет работать, если вы являетесь сервером, на котором вы не можете точно знать, откуда берется дата.

Моя текущая проблема заключается в том, что каждый раз, когда я нахожусь на компьютере с испанским набором и пытаюсь обработать дату с английским именем months, я получаю ошибку «недопустимый месяц».

Есть ли способ, которым я мог бы сообщить Oracle во время выполнения, на каком языке я отправляю?

Текущий некрасивый обходной путь заключается в переводе не совпадающих месяцев на испанский.

Ответ №1:

Для этого вам следует использовать NLS_DATE_LANGUAGE:

 select to_char(sysdate, 'dd Month, Day', 'NLS_DATE_LANGUAGE = turkish') from dual
  

Комментарии:

1. Отлично, вы можете сделать это таким образом, не изменяя сеанс. Даже лучше, чем принятый ответ IMO.

Ответ №2:

Вы можете использовать SELECT * FROM NLS_SESSION_PARAMETERS для определения ваших текущих языковых настроек (также NLS_INSTANCE_PARAMETERS и NLS_DATABASE_PARAMETERS существуют).

Используйте NLS_* переменные среды на вашей рабочей станции или ALTER SESSION инструкции в вашем сеансе SQL, чтобы изменить эти языковые настройки.

Ответ №3:

Может сработать изменение СЕАНСА. Я не помню точно, как, но я знаю, что с его помощью вы можете устанавливать локали, стили дат и форматы чисел.