Как изменить числовой столбец на дату в Oracle

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть числовой столбец, который показывает даты старшинства, подобные этому ‘20150802’, и я хотел бы видеть выходные данные в формате мм / дд / гггг. Как бы мне преобразовать числовой столбец в столбец даты?

Спасибо за вашу помощь!

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

1. У меня есть оператор case, подобный этому…

2. СЛУЧАЙ, КОГДА ПРОМЕЖУТОК между МЕСЯЦАМИ (tl.BUSINESS_DAY, tl.SENIORITY_DATE) <= 3, ЗАТЕМ ‘0-3 месяца’, КОГДА ПРОМЕЖУТОК Между месяцами (tl.BUSINESS_DAY, tl.SENIORITY_DATE) <= 6, ЗАТЕМ ‘3-6 месяцев’, КОГДА ПРОМЕЖУТОК между МЕСЯЦАМИ (tl.BUSINESS_DAY, tl.SENIORITY_DATE) <= 12, ЗАТЕМ ‘6-12 месяцев’, КОГДА ПРОМЕЖУТОК Между МЕСЯЦАМИ (tl .BUSINESS_DAY, tl.SENIORITY_DATE) <= 24 ЗАТЕМ ‘1-2 года’, КОГДА ПРОМЕЖУТОК МЕЖДУ МЕСЯЦАМИ (tl.BUSINESS_DAY, tl.SENIORITY_DATE) <= 36 ЗАТЕМ ‘2-3 года’, КОГДА ПРОМЕЖУТОК МЕЖДУ месяцами (tl.BUSINESS_DAY, tl.SENIORITY_DATE) > 36 ЗАТЕМ ‘3 Years’, ИНАЧЕ NULL ЗАКАНЧИВАЕТСЯ как TENURE_HIRE_DATE,

3. Но я получаю сообщение об ошибке, что это недействительный месяц

4. Как бы мне обойти это?

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

Ответ №1:

Вы можете использовать такое преобразование, как показано ниже :

 select to_char(to_date(20150802,'yyyymmdd'),'mm/dd/yyyy')
       as "Converted Date"
  from dual;

Converted Date
--------------
08/02/2015
  

P.S. Вы можете переключаться между dd и mm в формате then. Поскольку я не знаю, является ли 02 or 08 month или day соответственно.

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

1. Спасибо за вашу помощь!

Ответ №2:

Предполагая, что ваш столбец является a number и что он представляет такие даты, как 'yyyymmdd' , вам может понадобиться:

 select to_char(to_date(to_char(yourColumn), 'yyyymmdd'), 'mm/dd/yyyy')
  

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

1. @RB_29 . . . Внешний to_char() не нужен.

2. @Gordan Я пытался удалить его, но, к сожалению, похоже, не работает

Ответ №3:

Функции NUMTOYMINTERVAL и NUMTODSINTERVAL и некоторые арифметические действия дадут желаемый результат.

 select 
  to_char(date'1-1-1'  
    NUMTOYMINTERVAL(trunc(n / 10000) - 1, 'year')  
    NUMTOYMINTERVAL(trunc(mod(n, 1000) / 100) - 1, 'month')  
    NUMTODSINTERVAL(mod(n, 100) - 1, 'day'),
    'mm/dd/yyyy') as s
from (select 20150802 as n from dual) t
  

Выходной сигнал:

 S
----------
08/02/2015
  

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

1. Я бы сказал, немного излишне.

2. @WernfriedDomscheit, вопрос немного расплывчатый, чтобы дать на него простой и ясный ответ 🙂