Гость
Map
Форумы / SQL [закрыт для гостей] / Зодачко / 25 сообщений из 47, страница 1 из 2
09.10.2022, 11:40
    #178060
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
ГДе там наш Казахский фулстек?

Задачка.
Есть две даты. с помощью SQL запроса - найти сколько 29-ых февраля между ними.
таблицы не использовать.
...
Рейтинг: 0 / 0
09.10.2022, 11:56
    #178068
Умник^практик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
функцию isDATE можно использовать?
PS если год невысокосный, то на 29 февраля возвращает false
...
Изменено: 09.10.2022, 11:57 - Умник^практик
Рейтинг: 0 / 0
09.10.2022, 12:05
    #178076
Iron Horse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Умник^практик  09.10.2022, 11:56
[игнорируется]
функцию isDATE можно использовать?
PS если год невысокосный, то на 29 февраля возвращает false
Этого сука недостаточно. Год может быть и високосный, да 29.02 может не попадать в заданный диапазон.
...
Рейтинг: 0 / 0
09.10.2022, 12:18
    #178080
Умник^практик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Iron Horse  09.10.2022, 12:05
[игнорируется]
Умник^практик  09.10.2022, 11:56
[игнорируется]
функцию isDATE можно использовать?
PS если год невысокосный, то на 29 февраля возвращает false
Этого сука недостаточно. Год может быть и високосный, да 29.02 может не попадать в заданный диапазон.
если не попадет, то и проверяться в isDATE не будет

одним select-ом можно, если SQLServer или Oracle (в MySQL вот isDATE нет)
...
Изменено: 09.10.2022, 12:19 - Умник^практик
Рейтинг: 0 / 0
09.10.2022, 12:45
    #178105
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
Умник^практик  09.10.2022, 11:56
[игнорируется]
функцию isDATE можно использовать?
PS если год невысокосный, то на 29 февраля возвращает false
Смотря на какой базе она есть . можешь попробовать но учти что у тебя есть только две даты а между ними может быть 100 лет
и даже CTE не поможет.
...
Рейтинг: 0 / 0
09.10.2022, 12:49
    #178110
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
Умник^практик  09.10.2022, 12:18
[игнорируется]
Iron Horse  09.10.2022, 12:05
[игнорируется]
Умник^практик  09.10.2022, 11:56
[игнорируется]
функцию isDATE можно использовать?
PS если год невысокосный, то на 29 февраля возвращает false
Этого сука недостаточно. Год может быть и високосный, да 29.02 может не попадать в заданный диапазон.
если не попадет, то и проверяться в isDATE не будет

одним select-ом можно, если SQLServer или Oracle (в MySQL вот isDATE нет)
у меня видимо какой то неправильный оракл. но ты волен взять и написать запрос :-)
а заодно выяснить как выбрать каждый из 200 месяцев в запросе для проверки учитывая что в таблице эти месяца не лежат.
...
Рейтинг: 0 / 0
09.10.2022, 12:49
    #178111
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Doublekey  09.10.2022, 12:45
[игнорируется]
а между ними может быть 100 лет
и даже CTE не поможет.
есть такая функция в Postgresql generate_series, береш начальный год береш конечный скармливаешь в неё и она тебе возвращает ряд, потом считаешь сумму валидных 29 февраля на всем ряду через isDate или что там в твоей базе есть. На той базе на которой ты ща тренируешься должен быть аналог, может не прямой может с извратом через рекурсию но будет, просто ищи по стековермлоу mydb postgresql generate_series аналог
...
Изменено: 09.10.2022, 12:51 - vimba
Рейтинг: 0 / 0
09.10.2022, 12:50
    #178112
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
Одним селектом можно и без ISDATE можно, предлагайте варианты как :L-)
...
Рейтинг: 0 / 0
09.10.2022, 12:51
    #178113
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
vimba  09.10.2022, 12:49
[игнорируется]
Doublekey  09.10.2022, 12:45
[игнорируется]
а между ними может быть 100 лет
и даже CTE не поможет.
есть такая функция в Postgresql generate_series, береш начальный год береш конечный скармливаешь в неё и она тебе возвращает ряд, потом считаешь сумму валидных 29 февраля на всем ряду.
В Постгре есть есть даже коннект бай. может быть им накрутить, а вот как это решить без СТЕ коннект баев и прочего. то есть просто на основе разницы
...
Рейтинг: 0 / 0
09.10.2022, 16:39
    #178285
Гарыныч
Участник
[игнорирует гостей кроме]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[spoiler][size=4][b]Клоп, жидок ты обоссаный, просто пройди нахуй![/b][/size] [:nahui][/spoiler]
Зодачко
Doublekey  09.10.2022, 11:40
[игнорируется]
ГДе там наш Казахский фулстек?
а кто ето?
...
Рейтинг: 0 / 0
11.10.2022, 03:44
    #180245
Артефакт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
скорее всего бицуха сбежавший в казахстан
...
Рейтинг: 0 / 0
11.10.2022, 04:11
    #180246
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Тупой перебор с проверкой последнего дня февраля
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
tst> with t as (select date'1222-01-01' t_beg, sysdate t_end from dual),
  2       r as (select extract(year from t_beg)-1+rownum t_year
  3             from dual, t connect by level <= months_between(t_end, t_beg)/12+1),
  4       m as (select to_date('01-03-'||t_year, 'dd-mm-yyyy')-1 t_dt from r)
  5  select count(*) from m, t where t_dt between t_beg and t_end
  6  and extract(day from t_dt)=29
  7  /

  COUNT(*)
----------
       197
...
Изменено: 11.10.2022, 04:12 - 9288
Рейтинг: 1 / 0
Нравится: vimba
17.10.2022, 06:44
    #186814
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
9288  11.10.2022, 04:11
[игнорируется]
Тупой перебор с проверкой последнего дня февраля
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
tst> with t as (select date'1222-01-01' t_beg, sysdate t_end from dual),
  2       r as (select extract(year from t_beg)-1+rownum t_year
  3             from dual, t connect by level <= months_between(t_end, t_beg)/12+1),
  4       m as (select to_date('01-03-'||t_year, 'dd-mm-yyyy')-1 t_dt from r)
  5  select count(*) from m, t where t_dt between t_beg and t_end
  6  and extract(day from t_dt)=29
  7  /

  COUNT(*)
----------
       197
А без рекурсий?
...
Рейтинг: 0 / 0
17.10.2022, 07:10
    #186827
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
А зачем?
Или ты считаешь что надо найти года, делящаеся на 4, убрать делящиеся на 1000 и т.п. вычисления?
Ты уверен, что это сработает в начале эры?
Юлианский/грегорианский календарь не без изъебов
...
Рейтинг: 0 / 0
17.10.2022, 07:17
    #186832
ЖПС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
9288  17.10.2022, 07:10
[игнорируется]
убрать делящиеся на 1000 и т.п. вычисления?
на 100?
...
Рейтинг: 0 / 0
17.10.2022, 07:20
    #186835
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
На 100 убрать, на 1000 оставить, сам запутался :(((
2000 так-то тоже нивисокосный был
Но смысла для разовой задачи не вижу -- только как тут любят, проверить на знание предмета
...
Рейтинг: 0 / 0
17.10.2022, 07:41
    #186850
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
9288  17.10.2022, 07:10
[игнорируется]
А зачем?
Или ты считаешь что надо найти года, делящаеся на 4, убрать делящиеся на 1000 и т.п. вычисления?
Ты уверен, что это сработает в начале эры?
Юлианский/грегорианский календарь не без изъебов
оракл вроде учитывает все эти вычисления касаемо 1000 и т.д.

а вообще это за тем что данную задачку давали народу который еще не в курсе что такое коннект бай.
...
Рейтинг: 0 / 0
17.10.2022, 07:42
    #186852
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
9288  17.10.2022, 07:20
[игнорируется]
На 100 убрать, на 1000 оставить, сам запутался :(((
2000 так-то тоже нивисокосный был
Но смысла для разовой задачи не вижу -- только как тут любят, проверить на знание предмета
ну вот на знание предмета и давали, причем тем кто не в курсе рекурсивных методов.
...
Рейтинг: 0 / 0
17.10.2022, 07:51
    #186863
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Doublekey  17.10.2022, 07:42
[игнорируется]
9288  17.10.2022, 07:20
[игнорируется]
На 100 убрать, на 1000 оставить, сам запутался :(((
2000 так-то тоже нивисокосный был
Но смысла для разовой задачи не вижу -- только как тут любят, проверить на знание предмета
ну вот на знание предмета и давали, причем тем кто не в курсе рекурсивных методов.
В чем прикол?
Ну можно запросить ALL_OBJECTS или GENERATE_SERIES (или как он там называется)
Или можно решить, что ты знаешь как вычисляется високосный год (какой год был 0?)
Но зачем?
...
Рейтинг: 0 / 0
17.10.2022, 08:06
    #186871
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
9288  17.10.2022, 07:51
[игнорируется]
Doublekey  17.10.2022, 07:42
[игнорируется]
9288  17.10.2022, 07:20
[игнорируется]
На 100 убрать, на 1000 оставить, сам запутался :(((
2000 так-то тоже нивисокосный был
Но смысла для разовой задачи не вижу -- только как тут любят, проверить на знание предмета
ну вот на знание предмета и давали, причем тем кто не в курсе рекурсивных методов.
В чем прикол?
Ну можно запросить ALL_OBJECTS или GENERATE_SERIES (или как он там называется)
Или можно решить, что ты знаешь как вычисляется високосный год (какой год был 0?)
Но зачем?
ну в том прикол, что типа генерейт есть в постгре а в оракле нет. и в мссккл тоже нет.
но у и если оллобжект брать как вариант генерации последовательности а месяцев может быть больше
и кстати у всех ли пользователей есть доступ к этой таблице

то есть прикол в том как это дело рассчитать не генерируя простыню из февралей для проверки високосные они или нет.
а как вычисляется високосный год тут знать не надо оракл знает или мсскуль у него и можно спросить причем необязательно ластдеем

я ж говорю синтетическая задачка для академических целей.
...
Изменено: 17.10.2022, 08:06 - Doublekey
Рейтинг: 0 / 0
17.10.2022, 08:06
    #186872
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Doublekey  09.10.2022, 11:40
[игнорируется]
найти сколько 29-ых февраля между ними
нахрена?
...
Рейтинг: 0 / 0
17.10.2022, 08:07
    #186873
Doublekey
Участник
[скрыт]
[заблокирован]
Поместить в игнор-лист Сообщения автора в теме
Зодачко
eNose  17.10.2022, 08:06
[игнорируется]
Doublekey  09.10.2022, 11:40
[игнорируется]
найти сколько 29-ых февраля между ними
нахрена?
ПАТАМУЧТА ГЛАДИОЛУС!
...
Рейтинг: 0 / 0
17.10.2022, 08:11
    #186876
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Doublekey  17.10.2022, 08:06
[игнорируется]
но у и если оллобжект брать как вариант генерации последовательности а месяцев может быть больше
и кстати у всех ли пользователей есть доступ к этой таблице
Ты путаешь
Доступ есть у всех, но если хочется побольше можно и декартово произведение с ним же захреначить

Но ты так и не привел красивого решения
...
Рейтинг: 0 / 0
17.10.2022, 08:24
    #186893
Горбатый ёж
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
eNose  17.10.2022, 08:06
[игнорируется]
Doublekey  09.10.2022, 11:40
[игнорируется]
найти сколько 29-ых февраля между ними
нахрена?
Для расчёта процентов по кредиту, например.
...
Рейтинг: 0 / 0
17.10.2022, 08:30
    #186902
9288
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зодачко
Мне в свое время очень нравилась схема расчетов в одной плаьежной системе
То у них год считается за 360 дней (маленькте месяцы дополняютмя), то остаток считается по минимуму/среднему/исходящему/входящему остатку по счету
Весьма гибкая, но не факт, что соответствовала законодательству
Правда и законодательство не очень суровое было -- таки 90-е годы
...
Рейтинг: 0 / 0
Форумы / SQL [закрыт для гостей] / Зодачко / 25 сообщений из 47, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]