Я работаю над проблемой домашнего задания, я близок, но мне нужна помощь с преобразованием данных. Или sysdate - расчет start_date
Вопрос в том:
Используя схему EX, напишите оператор SELECT, который извлекает date_id и start_date из таблицы Date_Sample (формат ниже), за которым следует столбец с именем Years_and_Months_Since_Start, который использует интервальную функцию для получения количества лет и месяцев, прошедших между start_date и системная дата. (Ваши значения будут различаться в зависимости от даты выполнения этой лабораторной работы.) Отображать только записи с датами начала, у которых месяц и день равны 28 февраля (любого года).
DATE_ID START_DATE YEARS_AND_MONTHS_SINCE_START
2 Sunday , February 28, 1999 13-8
4 Monday , February 28, 2005 7-8
5 Tuesday , February 28, 2006 6-8
Наша схема EX, которая относится к этому вопросу, представляет собой просто таблицу Date_Sample с двумя столбцами:
DATE_ID NUMBER NOT Null
START_DATE DATE
Я написал этот код:
SELECT date_id, TO_CHAR(start_date, 'Day, MONTH DD, YYYY') AS start_date ,
NUMTOYMINTERVAL((SYSDATE - start_date), 'YEAR') AS years_and_months_since_start
FROM date_sample
WHERE TO_CHAR(start_date, 'MM/DD') = '02/28';
Но моя колонка «Годы и месяцы с момента запуска» не работает должным образом. Получаются очень высокие цифры по годам и месяцам, когда вычисленная дата относится к 1999 году. т.е. должно быть 13-8, а я получаю 5027-2, так что я знаю, что это неправильно. Я использовал NUMTOYMINTERVAL, что должно быть правильно, но не думаю, что sysdate-start_date работает. Тип данных для start_date — просто дата. Я попробовал ROUND, но, возможно, мне нужна помощь, чтобы понять это правильно.
Что-то не так с моим расчетом и попытками выяснить, как получить там правильный интервал. Не уверен, что я предоставил достаточно информации всем, но я дам вам знать, если выясню это раньше, чем вы.
Это вопрос из книги Мураха по Oracle и SQL/PL, глава 17, если кто-то еще пытается изучить эту главу. Страница 559.