powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Вопросы по IT / А мне помогите с задачкой по MS SQL
21 сообщений из 21, страница 1 из 1
А мне помогите с задачкой по MS SQL
    #593516
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то я с этими датами и функциями постоянно туплю.
Задача такая: нужно строить отчет по периоду. Период это 12 часов с 7:00 до 19:00 и с 19:00 до 7:00.
На входе у нас текущие дата/время. Нужно получить два параметра: дата/время начала прошедшего периода и дата/время окончания прошедшего периода.
Например, сейчас 17.09.2018 15:26, на выходе надо иметь два параметра 16.09.2018 19:00 - 17.09.2018 07:00.
Соответственно 17.09.2018 в 19:05 должно получится 17.09.2018 07:00 - 17.09.2018 19:00.
Спасибо.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593745
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stable  17.09.2018, 15:27
А то я с этими датами и функциями постоянно туплю.
Задача такая: нужно строить отчет по периоду. Период это 12 часов с 7:00 до 19:00 и с 19:00 до 7:00.
На входе у нас текущие дата/время. Нужно получить два параметра: дата/время начала прошедшего периода и дата/время окончания прошедшего периода.
Например, сейчас 17.09.2018 15:26, на выходе надо иметь два параметра 16.09.2018 19:00 - 17.09.2018 07:00.
Соответственно 17.09.2018 в 19:05 должно получится 17.09.2018 07:00 - 17.09.2018 19:00.
Спасибо.
Эээ... А в чем тут технические сложности?
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593761
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  17.09.2018, 16:11
Stable 
А то я с этими датами и функциями постоянно туплю.
Задача такая: нужно строить отчет по периоду. Период это 12 часов с 7:00 до 19:00 и с 19:00 до 7:00.
На входе у нас текущие дата/время. Нужно получить два параметра: дата/время начала прошедшего периода и дата/время окончания прошедшего периода.
Например, сейчас 17.09.2018 15:26, на выходе надо иметь два параметра 16.09.2018 19:00 - 17.09.2018 07:00.
Соответственно 17.09.2018 в 19:05 должно получится 17.09.2018 07:00 - 17.09.2018 19:00.
Спасибо.
Эээ... А в чем тут технические сложности?
Нифчом, я просто в функция MS SQL путаюсь.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593840
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stable  17.09.2018, 16:13
WildMage 
Stable 
...
Эээ... А в чем тут технические сложности?
Нифчом, я просто в функция MS SQL путаюсь.
У тебя задача вообще от входного параметра анализировать только значение часов datepart. Дальше в зависимости от того куда попадает по параметрам дня, месяца и года конструируешь нужный интервал
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593853
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  17.09.2018, 16:24
Stable 
WildMage 
...
Нифчом, я просто в функция MS SQL путаюсь.
У тебя задача вообще от входного параметра анализировать только значение часов datepart. Дальше в зависимости от того куда попадает по параметрам дня, месяца и года конструируешь нужный интервал
Что типа
Case when datepart(hour, @input) between 7 and 19 then...
... < 7 then...
... > 19. then...
Это на вскидку.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593857
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  17.09.2018, 16:24
Stable 
WildMage 
...
Нифчом, я просто в функция MS SQL путаюсь.
У тебя задача вообще от входного параметра анализировать только значение часов datepart. Дальше в зависимости от того куда попадает по параметрам дня, месяца и года конструируешь нужный интервал
Я понимаю как это должно работать, но ипаться с вашими datapart, convert и cast я буду часа полтора. Я думал друзья за 5 минут помогут написать и я пойду счастливый. Ну нет, так сам вечерком как-нибудь напишу, когда меня бесить не будет.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593893
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stable  17.09.2018, 16:27
WildMage 
Stable 
...
У тебя задача вообще от входного параметра анализировать только значение часов datepart. Дальше в зависимости от того куда попадает по параметрам дня, месяца и года конструируешь нужный интервал
Я понимаю как это должно работать, но ипаться с вашими datapart, convert и cast я буду часа полтора. Я думал друзья за 5 минут помогут написать и я пойду счастливый. Ну нет, так сам вечерком как-нибудь напишу, когда меня бесить не будет.
Ну блин. С мобилы сильно не попишешь. Если бы ты написал, когда я ещё на работе был.
Кстати, если у тебя версия больше 2005,. Есть хинт как сразу откинуть время и не париться. Там надо кастануть к типу date.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593905
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  17.09.2018, 16:34
Stable 
WildMage 
...
Я понимаю как это должно работать, но ипаться с вашими datapart, convert и cast я буду часа полтора. Я думал друзья за 5 минут помогут написать и я пойду счастливый. Ну нет, так сам вечерком как-нибудь напишу, когда меня бесить не будет.
Ну блин. С мобилы сильно не попишешь. Если бы ты написал, когда я ещё на работе был.
Кстати, если у тебя версия больше 2005,. Есть хинт как сразу откинуть время и не париться. Там надо кастануть к типу date.
Честно говоря не помню. По моему сервер 2008 или выше, но переехало это все с 2005.
Тоже ща без доступа туда.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #593912
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stable  17.09.2018, 16:36
WildMage 
Stable 
...
Ну блин. С мобилы сильно не попишешь. Если бы ты написал, когда я ещё на работе был.
Кстати, если у тебя версия больше 2005,. Есть хинт как сразу откинуть время и не париться. Там надо кастануть к типу date.
Честно говоря не помню. По моему сервер 2008 или выше, но переехало это все с 2005.
Тоже ща без доступа туда.
Ну тогда надо смотреть ещё compatibility level для базы, чтобы фичу использовать. При переезде могут забыть его поднять и в этом случае фича может не работать.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #598934
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покритикуйте что ли говнокод
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET DATEFIRST 1;
declare @td as datetime
set @td = GETDATE()
declare @dtstart as datetime
declare @dtend as datetime

set @dtstart =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '07:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
end

set @dtend =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '19:00:00' as datetime)
end

select  @td, @dtstart,@dtend
...
Рейтинг: 1 / 0
Нравится: Владайка
А мне помогите с задачкой по MS SQL
    #599345
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stable  19.09.2018, 14:57
покритикуйте что ли говнокод
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET DATEFIRST 1;
declare @td as datetime
set @td = GETDATE()
declare @dtstart as datetime
declare @dtend as datetime

set @dtstart =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '07:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
end

set @dtend =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '19:00:00' as datetime)
end

select  @td, @dtstart,@dtend
Значение окончания интервала незачем так сложно считать. Можно просто прибавить нужное количество часов.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599684
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вскидку , это не sql!
Конструкцию case надо избегать, это не sql
Надо несколько таблиц сделать в 3 форме
, и join потом. Case станет не нужен. Цыфры и даты не нужны в коде , совсем, почему они не в таблице?
А даты надо писать в таблицу, формате 'yyyymmdd..............'
...
Изменено: 19.09.2018, 18:36 - sparrow
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599688
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И переменные зачем, если не секрет?
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599714
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sql.
Это

Select и
Insert
Update
Потом ненужный delete

Ну и dml,
c create, drop, add,

Потом с мурой в виде функций, и оконных в том числе.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599755
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sparrow  19.09.2018, 18:44
Sql.
Это

Select и
Insert
Update
Потом ненужный delete

Ну и dml,
c create, drop, add,

Потом с мурой в виде функций, и оконных в том числе.
Ты как Пашка прямо.
Запаркуа такой огород из таблиц городить. Ты туда все даты хочешь сложить? А потом два других интервала понадобятся и что колонки добавлять?
Делать неоптимально это принципиальная позиция?
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599765
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  19.09.2018, 19:19
sparrow 
Sql.
Это

Select и
Insert
Update
Потом ненужный delete

Ну и dml,
c create, drop, add,

Потом с мурой в виде функций, и оконных в том числе.
Ты как Пашка прямо.
Запаркуа такой огород из таблиц городить. Ты туда все даты хочешь сложить? А потом два других интервала понадобятся и что колонки добавлять?
Делать неоптимально это принципиальная позиция?
Так это совсем не sql. Что хотите?

Дайте код создания таблиц.
Их Заполнения и сфомулируйте вопрос?
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599773
Фотография sparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прям так трудно код создания таблицы написать , дольше чем массив декларировать?
...
Изменено: 19.09.2018, 19:33 - sparrow
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599778
WildMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sparrow  19.09.2018, 19:26
WildMage 
sparrow 
...
Ты как Пашка прямо.
Запаркуа такой огород из таблиц городить. Ты туда все даты хочешь сложить? А потом два других интервала понадобятся и что колонки добавлять?
Делать неоптимально это принципиальная позиция?
Так это совсем не sql. Что хотите?

Дайте код создания таблиц.
Их Заполнения и сфомулируйте вопрос?
Это самый что ни на есть T-SQL.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599834
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildMage  19.09.2018, 16:40
Значение окончания интервала незачем так сложно считать. Можно просто прибавить нужное количество часов.
[:biggrin]
Я конечно тормоз.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #599837
Stable
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sparrow  19.09.2018, 18:31
И переменные зачем, если не секрет?
Они потом подставляются в select в where и используются в TextField на форме отчетов.
...
Рейтинг: 0 / 0
А мне помогите с задачкой по MS SQL
    #600297
Бояннизд02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сообщение под именем пользователя
Stable  19.09.2018, 14:57
покритикуйте что ли говнокод
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET DATEFIRST 1;
declare @td as datetime
set @td = GETDATE()
declare @dtstart as datetime
declare @dtend as datetime

set @dtstart =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '07:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
end

set @dtend =
case
when (datepart(hour, @td) >= 0 and datepart(hour, @td) < 7) then cast(convert(varchar(11), DATEADD(day,-1,@td), 126) + '19:00:00' as datetime)
when (datepart(hour, @td) >= 7 and datepart(hour, @td) < 19) then cast(convert(varchar(11), @td, 126) + '07:00:00' as datetime)
else cast(convert(varchar(11), @td, 126) + '19:00:00' as datetime)
end

select  @td, @dtstart,@dtend
значения в 07:00:00 и в 19:00:00 могут попадать в оба интервала, надо быть внимательным в формировании условия
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Вопросы по IT / А мне помогите с задачкой по MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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