Oracle конвертирует DD-MON-YY в DD/MM/YYYY

Я пытаюсь преобразовать формат столбца varchar2 из «DD-MON-YY» в «DD/MM/YYYY».

Например: с '01-ЯНВ-16' по '01/01/2016.

Если вы можете спросить или это может помочь:

  • Часть «MON» на английском языке, однако мои текущие настройки NLS на турецком языке.
  • Все годы после 2000.

Как я могу это сделать? Заранее спасибо..


person kzmlbyrk    schedule 24.10.2016    source источник
comment
С какой стати вы храните дату в столбце varchar?   -  person a_horse_with_no_name    schedule 24.10.2016
comment
Вероятно, потому что он использует атрибут Oracle flexfield (который определен как varchar2) и маскирует его набором проверки формата даты.   -  person alexherm    schedule 19.05.2021


Ответы (3)


Если вы не укажете параметр NLS_DATE_LANGUAGE, будет использоваться ваш собственный параметр сеанса.

Вы можете переопределить это так:

select TO_CHAR(TO_DATE('01-JAN-16','DD-MON-YY', 'NLS_DATE_LANGUAGE = English'),
           'DD/MM/YYYY') from dual;

Это повлияет только на этот запрос, больше ничего. Если вам нужно работать со многими датами, как это,

ALTER SESSION SET NLS_DATE_LANGUAGE='ENGLISH'

- затем вы можете изменить его позже, или он будет сброшен на турецкий, когда этот сеанс завершится, и вы начнете другой сеанс.

Если вам нужно, чтобы это изменение стало (почти) постоянным, поместите его в свои настройки в SQL Developer или Toad или в файл login.sql для SQL*Plus.

person mathguy    schedule 24.10.2016
comment
Я бы дал вам больше, чем один голос, если бы я мог! Большое спасибо - person benshabatnoam; 12.07.2017

Попробуй это:

TO_CHAR(TO_DATE('01-JAN-16','DD-MON-YY'),'DD/MM/YYYY')

Ваши данные должны быть чистыми — все должно соответствовать исходному формату, иначе вы столкнетесь с ошибками при преобразовании TO_DATE.

person DCookie    schedule 24.10.2016
comment
Спасибо за ответ, я получил сообщение об ошибке 01843. 00000 - недействительный месяц. Я проверил, что все значения имеют одинаковый формат. Это связано с моими настройками NLS? Как я могу это исправить? - person kzmlbyrk; 24.10.2016
comment
Попробуйте с ММ на том месте, где написано ПН. - person Rubén Navarro Davó; 16.11.2018

Перейдите в Инструменты —> Настройки —> База данных —-> NLS —> Формат даты и измените дату на ДД/ММ/ГГГГ.

Oracle SQL Developer, версия 18.4.0.376, сборка 376.1900

person Ashish S    schedule 22.05.2019