Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 42
MS SQL

Найти выходные за период в разрезе месяца

14.04.2017, 05:48. Показов 2104. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На компьютере:
XE2, MsSQL
Таблица:
Jornal
Колонки:
ID, Data,Name
Задача:
Нужно создaть SQL зaпрос кoтoрый рaссчитаeт кoличество выхoдных днeй (все суббoты и вoскрeсeния) в разрезе мeсяца за тeкущий гoд/
Ответ нужно записать в DBEdit1 или в Диалоговое окно

Нf данные момент вообще ничего не делает(((
Delphi
1
2
3
4
 ADOQuery2.Close;                // DATEDIFF ( datepart , startdate , enddate )')
 ADOQuery2.SQL.Clear;
 ADOQuery2.SQL.Add('SELECT  DATEDIFF ( week  , "2017-04-14" , "2017-12-31" )');
 ADOQuery2.ExecSQL;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2017, 05:48
Ответы с готовыми решениями:

Данные в разрезе месяца
Добрый день. Существует табличка table1 с полями dates,id и table2 с полями Sums, Oborots Как вывести данные в формате: дата,...

Вывод платежей за период с 1 по 15 число текущего месяца
Добрый вечер! Подскажите, пожалуйста, как оформить запрос на вывод номеров, по которым была произведена оплата с 1 до 15 числа текущего...

За какой период месяца выпало больше всего осадков?
Ученик шестого класса вел дневник наблюдений, в котором каждый день отмечал количество выпавших осадков. Определить, за какой период месяца...

3
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
14.04.2017, 07:36
Цитата Сообщение от schapovalov1991 Посмотреть сообщение
Нf данные момент вообще ничего не делает(((
на данный момент его ничего не просят сделать. Даже если бы запрос и выполнился, то что даст количество недель в некотором интервале?

Добавлено через 1 минуту
Цитата Сообщение от schapovalov1991 Посмотреть сообщение
кoличество выхoдных днeй (все суббoты и вoскрeсeния) в разрезе мeсяца за тeкущий гoд
месяц как резать будем? может лучше нарисуете, что получить хотите?

Добавлено через 37 минут
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DECLARE @Today datetime
SET @Today = CAST(FLOOR(CAST(GetDate() AS FLOAT)) AS datetime)
DECLARE @Month01 datetime
SET @Month01 = DATEADD(DAY, -DAY(@Today) + 1, @Today)
DECLARE @Jan01 datetime
SET @Jan01 = DATEADD(MONTH, -MONTH(@Month01) + 1, @Month01)
 
 
SELECT mm, 
  8 +
  CASE WHEN MONTH(d29) = mm AND datepart(weekday, d29) IN (1, 7) THEN 1 ELSE 0 END +
  CASE WHEN MONTH(d30) = mm AND datepart(weekday, d30) IN (1, 7) THEN 1 ELSE 0 END +
  CASE WHEN MONTH(d31) = mm AND datepart(weekday, d31) IN (1, 7) THEN 1 ELSE 0 END
FROM (
SELECT mm, DateAdd(DAY, 28, d01) d29, DateAdd(DAY, 29, d01) d30 , DateAdd(DAY, 30, d01) d31  
FROM (
  SELECT mm, DateADD(MONTH, (mm-1), @Jan01) d01 
  FROM (
    SELECT 1 mm UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
  ) mm 
) m
) d2931
19
28
38
410
58
68
710
88
99
109
118
1210

Праздничные дни и связанные с ними переносы не учитывались
1
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 42
14.04.2017, 18:51  [ТС]
Благодарю за ответ, а можно не много прокомментировать код, а то возникают вопросы.
В частности строки: 2,4,11,15,17
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
15.04.2017, 01:12
SQL
1
SET @Today = CAST(FLOOR(CAST(GetDate() AS FLOAT)) AS datetime)
из сегодняшней даты со временем получаем сегодняшнюю дату без времени,
преобразуя дату в число CAST(GetDate() AS FLOAT, что в принципе несложно т.к. дата в виде такого числа и хранится,т.е. это просто приведение типа
округляя до ближайшего целого FLOOR(...)
и приводя обратно к дате CAST(... AS DATE TIME)
SQL
1
SET @Month01 = DATEADD(DAY, -DAY(@Today) + 1, @Today)
получаем 1 апреля, отнимая от сегодняшней даты на 1 день меньше, чем сегодняшнее число
SQL
1
SET @Jan01 = DATEADD(MONTH, -MONTH(@Month01) + 1, @Month01)
получаем 1 января, отнимая от 1 апреля месяцесв на 1 меньше, чем текущий

Итак, получили 1 января текущего года с помощью имеющихся datetime функций

SQL
1
2
3
4
5
6
SELECT mm, DateADD(MONTH, (mm-1), @Jan01) d01 
  FROM (
    SELECT 1 mm UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION 
    SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION 
    SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12
  ) mm
к дате 1 января прибавляем от 0 до 11 месяцев получаем 12 месяцев и их первое число

12017-01-01 00:00:00.000
22017-02-01 00:00:00.000
......
112017-11-01 00:00:00.000
122017-12-01 00:00:00.000

SQL
1
2
3
4
SELECT mm, DateAdd(DAY, 28, d01) d29, DateAdd(DAY, 29, d01) d30 , DateAdd(DAY, 30, d01) d31  
FROM (
  ...
) m
получаем столбцы с 29, 30 и 31 числа "каждого" месяца прибавляя соответственно 28, 29 и 30 дней к 1-му числу месяца

12017-01-292017-01-302017-01-31
22017-03-012017-03-022017-03-03
32017-03-292017-03-302017-03-31
42017-04-292017-04-302017-05-01
............
естественно, это может оказаться и не 31 число этого месяца, а первое следующего, поэтому мы учтем этот день, если он суббота или воскресенье datepart(weekday, d31) IN (1, 7) и относится к этому же месяцу MONTH(d31) = mm
Все это относится и к 29 и 30 числам месяца. Ну а с первыми 28 числами месяца все просто - это ровно 4 недели, в которых ровно 4 субботы и 4 воскресенья
SQL
1
2
3
4
5
6
7
8
SELECT mm, 
  8 +
  CASE WHEN MONTH(d29) = mm AND datepart(weekday, d29) IN (1, 7) THEN 1 ELSE 0 END +
  CASE WHEN MONTH(d30) = mm AND datepart(weekday, d30) IN (1, 7) THEN 1 ELSE 0 END +
  CASE WHEN MONTH(d31) = mm AND datepart(weekday, d31) IN (1, 7) THEN 1 ELSE 0 END
FROM (
...
) d2931
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2017, 01:12
Помогаю со студенческими работами здесь

Вводить название месяца и видеть названия цветов которые цветут в этот период
Дано множество M, содержащее цветов {Крокус:март-апрель, Нарцисс:апрель-май, Лилия:июнь-июль, Тюльпаны:апрель-май,...

Как мне вывести людей, которые получили зароботную плату по 1000р за период в 3 месяца?
как мне вывести людей которые получили зароботную плату по 1000р за период в 3 месяца! при этом нужно учесть все 3 месяца!т.е по все трем...

2.Сначала 1991 года по некоторый день прошло N месяцев и 2 дня найти название месяца этого месяца.
2.Сначала 1991 года по некоторый день прошло N месяцев и 2 дня найти название месяца этого месяца.

Типовые бух.отчеты по ОС. Найти сумму переоценки в разрезе ОС (КО - ДО)
Итак,уже 4 часа мучаюсь и пытаюсь вникнуть в чужой код . необходимо найти в коде как рассчитываются определенные данные. на скринах...

Найти входные и выходные характеристики биполярных транзисторов
Помогите пожалуйста найти входные и выходные характеристики биполярных транзисторов, столько справочников уже перебрал и не чего нужного не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru