
- •Дана символьная строка, в которой отдельные слова разделены любым количеством пробелов.
- •//Условие задачи:
- •Определить список последовательностей подчиненности от преподавателей, не имеющих начальника, до преподавателей, не имеющих подчиненных. Результат представить в виде:
- •Посчитать кол-во 29.02 между двумя заданными датами
- •Показать накопленную сумму сотрудников по их отделам.
- •Вывести все даты за 2011 год и соответствующие дни недели без использования иерархических запросов и Model.
- •В произвольной строке, состоящей из символьных элементов, разделенных запятыми, отсортировать элементы по алфавиту. Например, символьную строку
- •Определить временной интервал между заданной и текущей датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.
- •Вывести фамилии сотрудников, начальники которых работают в другой стране.В результат вывести:
- •Для таблиц схемы, имеющих индексы вывести:
- •Определить дату начала ближайшего к заданной дате Уимблдонского турнира, который начинается за шесть недель до первого понедельника августа
- •Для каждой таблицы схемы вывести:
- •Определить сколько лет, месяцев и дней осталось до президентских выборов в сша, которые проводятся по високосным годам в первый понедельник после первого вторника ноября.
- •Дана таблица из двух столбцов: 1 - строка, 2 – число. Требуется написать запрос, в результате
- •Написать запрос, выдающий отчёт о суммарных выплатах сотрудникам, непосредственно
- •Определить временной интервал между датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.
- •Вывести фамилии всех сотрудников через запятую столько раз сколько символов в их фамилии
- •Для каждой таблицы схемы вывести:
- •Создать запрос для определения сумм зарплат сотрудников от сотрудников, не имеющих менеджеров, до сотрудников, не имеющих подчиненных.
- •Выборы президента сша
- •Плотный ранг
- •Для всех связей между таблицами схемы вывести:
- •Из заданных наборов символов исключить те наборы символов, которые отличаются только порядком. Например, заданы наборы:
- •В названии отдела вывести только второе слово, если название состоит из двух и более слов, иначе вывести первое слово.
- •Создать запрос для определения списка городов, в которых расположены департаменты, суммарная заработная плата в которых выше средней суммарной заработной платы в департаментах этого города.
- •Имеется таблица:
- •Определить сумму цифр в произвольной символьной строке.
- •Для каждой таблицы схемы вывести:
- •Для каждой таблицы схемы вывести:
- •Сформировать отчёт, содержащий номер отдела, название отдела, имена и фамилии сотрудников, а также их зарплату в виде:
- •Условия нет
- •Условия нет
- •Вывести фамилии сотрудников, получающих зарплату выше средней в отделе, в котором они работают.
- •Не помню задание, похоже на костяна, мишаню и лену
- •Для всех таблиц схемы вывести:
- •Задания нет
- •Сумма цифр в строке
- •Создать запрос для вывода фамилий, последних должностей и дат приема на работу сотрудников, информация о работе
- •"Определить ближайший к заданной дате год, когда 29 февраля придется на воскресенье. "
- •В таблицу записана информация об удачных и неудачных попытках подключения к базе данных.
Вывести все даты за 2011 год и соответствующие дни недели без использования иерархических запросов и Model.
Select To_Date(Rownum,'DDD')-(Select Add_Months(Trunc(To_date('11.11.2011'),'Y'),12) - Trunc(To_date('11.11.2011'),'Y')
From Dual) Days_Of_Year,
To_Char(To_Date(Rownum,'DDD')-(Select Add_Months(Trunc(To_Date('11.11.2011'),'Y'),12) - Trunc(To_Date('11.11.2011'),'Y')
From Dual),'Day') Day_Of_Week
From (
SELECT *
From (Select 1 C1, 2 C2, 3 C3, 4 C4, 5 C5, 6 C6, 7 C7, 8 C8, 9 C9 from dual)
Group By Cube(1,2,3,4,5,6,7,8,9)
) -- этот подзапрос нужен для вывода столбца длинной свыше 366
--выдает все варианты перебора строк, всего будет 512 вариантов. Нам понадобится только один столбец.
Where Rownum Between 0 And (Select Add_Months(Trunc(To_Date('11.11.2011'),'Y'),12) - Trunc(To_Date('11.11.2011'),'Y')
From Dual); --Возвращает кол-во дней в 2011 году
В произвольной строке, состоящей из символьных элементов, разделенных запятыми, отсортировать элементы по алфавиту. Например, символьную строку
abc,cde,ef,gh,mn,test,ss, df,fw,ewe,wwe
преобразовать к виду:
abc,cde,df,ef,ewe, fw,gh,mn,ss,test,wwe.
With T As
(Select Regexp_Substr('abc,cde,ef,gh,mn,test,ss,df,fw,ewe,wwe', '[^,]+', 1, Level) Str
From Dual
Connect By Instr('abc,cde,ef,gh,mn,test,ss,df,fw,ewe,wwe', ',', 1, Level - 1) > 0
Order By 1) -- разбиваем нашу строку на подстроки, разделенные запятыми и сортируем по алфавиту
Select 'abc,cde,ef,gh,mn,test,ss,df,fw,ewe,wwe' Исходник, Max(Ltrim(Sys_Connect_By_Path(Str, ','), ',')) Результат
From (Select T.Str,Rownum Rn
From T)
Start With Rn=1
Connect By Prior Rn+1=Rn; -- пронумеруем каждую строчку и произведем сборка столбика в строчку (функция Sys_Connect_By_Path(Str, ','))
Определить временной интервал между заданной и текущей датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.
SELECT CASE
WHEN TO_DATE(sysdate,'dd.mm.yy') >= TO_DATE('&&x', 'dd.mm.yy') THEN (
TRUNC(MONTHS_BETWEEN(sysdate, TO_DATE('&x', 'dd.mm.yy'))/12)|| ' лет '||
TRUNC(MOD(MONTHS_BETWEEN(sysdate, TO_DATE('&x', 'dd.mm.yy')), 12))|| ' месяцев '||
CASE
WHEN SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) < SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
THEN SUBSTR(LAST_DAY(ADD_MONTHS('&x', TRUNC(MONTHS_BETWEEN(sysdate, TO_DATE('&x', 'dd.mm.yy'))))), 0, 2) - SUBSTR(to_date('&x', 'dd.mm.yy'), 0, 2) + substr(to_date(sysdate,'dd.mm.yy'), 0, 2)
WHEN SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) >= SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
THEN SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) - SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
END || ' дней' )
WHEN TO_DATE(sysdate,'dd.mm.yy') < TO_DATE('&x', 'dd.mm.yy') THEN (
TRUNC(MONTHS_BETWEEN(to_date('&x', 'dd.mm.yy'),sysdate)/12)|| ' лет '||
TRUNC(MOD(MONTHS_BETWEEN(to_date('&x', 'dd.mm.yy'),sysdate ), 12))|| ' месяцев '||
CASE
WHEN SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) < SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
THEN SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2) - SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2)
WHEN SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) > SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
THEN SUBSTR(LAST_DAY(ADD_MONTHS(sysdate, TRUNC(MONTHS_BETWEEN(to_date('&x', 'dd.mm.yy'),sysdate)))), 0, 2) - SUBSTR(TO_DATE(sysdate,'dd.mm.yy'), 0, 2) + SUBSTR(TO_DATE('&x', 'dd.mm.yy'), 0, 2)
END || ' дней' )
END "RESULT"
FROM dual;
UNDEFINE x