2016-10-24 4 views
3

Я пытаюсь преобразовать формат столбца varchar2 из 'DD-MON-YY' до 'DD/MM/YYYY'.оракул новообращенный DD-MON-YY для DD/MM/YYYY

В примере: от '01-JAN-16' до '01/01/2016'

В случае, если вы можете спросить или это может помочь:

  • 'MON' часть на английском языке, но мои текущие настройки NLS находятся на турецком языке.
  • Все годы являются после 2000.

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

+4

Почему вы храните дату в столбце varchar? –

ответ

6

Если вы не указали параметр 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.

+0

спасибо много и mathguy и Dcookie! – kzmlbyrk

+0

Я бы дал вам больше, чтобы один голос, если бы я мог! Большое спасибо – benshabatnoam

2

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

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

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

+0

Спасибо за ответ, я получил сообщение об ошибке «01843. 00000 -« недействительный месяц ». ​​Я проверил все значения в том же формате. Это связано с моими настройками NLS? Как я могу исправить это? – kzmlbyrk