#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, вопрос немного расплывчатый, чтобы дать на него простой и ясный ответ 🙂