#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:
Может сработать изменение СЕАНСА. Я не помню точно, как, но я знаю, что с его помощью вы можете устанавливать локали, стили дат и форматы чисел.