Oracle Developer👨🏻‍💻
3.22K subscribers
608 photos
68 videos
2 files
486 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Финальный запрос:
select day
,count(*)
from (select trim(to_char(trunc(sysdate, 'YYYY') + level - 1,
'DAY',
'nls_date_language = Russian')) day
from dual
connect by level <= (add_months(trunc(sysdate, 'YYYY'), 12) -
trunc(sysdate, 'YYYY')))
group by day;

Дополнительное задание: отсортировать результат в порядке дней недели (понедельник, вторник и т.д.).

Надеюсь, вам понравилась задачка 😉

#sql #решениезадачи #to_char #иерархическиезапросы
Задача: Написать запрос, который выводит день программиста в текущем году (256 день) в формате день-название_месяца-годTномер_недели

Принцип решения:
* sysdate - дата в текущем году.
* trunc(sysdate) - 1 января текущего года.
* + 255 - получаем день программиста. Именно, 255, а не 256, т.к. 1 января это уже первый день.
* to_char + форматная маска - для вывода в требуемом формате.
* nls_date_language - дата в РУ формате.

Запрос:
select to_char(trunc(sysdate, 'YYYY') + 255, 'DD-MONTH-YYYY"T"WW', 'NLS_DATE_LANGUAGE=RUSSIAN')
from dual;

Надеюсь, вам понравилась задачка 😉

#sql #решениезадачи #to_char
👍1
Задача: вывести календарь за текущий месяц с использованием таблицы dual. Подробно см. постановку в посте.

Решение (например, такое):

select to_char(ddate, 'dd.mm.YYYY') dday
,to_char(ddate, 'DAY', 'nls_date_language = UKRAINIAN') day
from (select trunc(sysdate, 'mm') + level - 1 ddate
from dual
connect by level <= add_months(trunc(sysdate, 'mm'), 1) -
trunc(sysdate, 'mm')) x
order by x.ddate;

1️⃣ В таблице dual хранится только одна строка. Для того, чтобы вывести календарь нам нужно сгенерировать строки с использованием иерархического запроса - connect by level. Количество строк будет определяться как разница между первым днем текущего месяца и первым днем следующего.

2️⃣ trunc(sysdate, 'mm') - первый день текущего месяца.
add_months(trunc(sysdate, 'mm'), 1) - первый день следующего месяца.
select trunc(sysdate, 'mm') + level - 1 - каждый уровень иерархии даст день месяца.

3️⃣ Для вывода дат в определенном формате, используем функцию to_char с указанием формата. В случае, с выводом дня недели добавляем опцию украинского языка.

Задача не сильно сложная, но затрагивает разные моменты по написанию запросов. Всем отписавшимся под постом вторника - респект 🔥

Палец вверх, если понравилась задачка 👍

#решениезадачи #иерархическиезапросы #to_char
👍1