Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL вычислить дату в промежутке с учетом дополнительного времени  [new]
Freeze729
Member

Откуда:
Сообщений: 161
Доброе утро.

Подскажите, как составить дополнительное условие в запросе.
Задача такая.
Есть величины date_time = '28.02.2012 23:45' - дата и время начала поставки, где 23:45 постоянное планируемое время поставки.
week='0001000' - дни недели 0- в этот день недели поставка отсутствует, 1 - присутствует /*week='0000000' - однократная поставка*/
period_date_time = '03.02.2012 23:59' - период поставки, поставлять до.
time_delay='01.03.2012 00:40" - время задержки, где 01.03.2012 - дата задержки, 00:40 - дополнительное количество минут к предполагаемому времени (23:45 + 40 мин)
и получается мне нужно выбрать грузы от текущего момента +24ч, учитывая время задержки.

Первое условие (date_time+время задержки) between getdate() and getdate()+1 and week='0000000'
А второе как вычилять, дата которого находится в промежутке + учитывая задержку?
Или мне отдельно ее вычислить в запросе и join сделать?
1 мар 12, 10:17    [12174776]     Ответить | Цитировать Сообщить модератору
 Re: SQL вычислить дату в промежутке с учетом дополнительного времени  [new]
Freeze729
Member

Откуда:
Сообщений: 161
Понятно, на запросе будет проще.
Задача таже. Выразите мнение хотя бы в какую сторону двигаться, что почитать, о чем задуматься.
Корректно ли я выбрал условия?
И можно ли сокращать все эти операции обрезания с датами, заносить прямо в переменную среди запроса?
И вопрос сюда же. Хранимые процедуры, это что-то типа тоже обработки запроса, только там еще можно вертеть крутить данные и на выход давать что я хочу. Макрос иными словами? А где почитать, может кто-нибудь ресурс подсказать. Вопросов много, знаний не хватает. Яндекс явно не заточен на образование. Выдает всякое (материться низя)...
Закоментарил то, что вынес из T5, t6, t7. Я не знаю как лучше будет, оставить их в условии или вынести наверх.

Информация о маршрутах хранится в таблице CAR, а задержки в settings.

with t5 as
(select 

code as id
    
from CAR a, 
 --zaderg рейсы с задержками сегодняшнего дня
    (Select CONVERT(datetime,comment, 104) as time_delay, 
value as zad_id from settings where 
param='DELAY_CAR' ) b

where substring(day_of_week,datepart (dw,DATEADD(mi,-datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),getdate()) ),1)='1' 

 and period_date_time>=getdate() 

and a.code=b.zad_id)
,t6 as 
(select 

code as id
    
from CAR a, 
 --zaderg рейсы завтрашнего дня. если Getdate под вечер, а нам надо видеть все рейсы за 24 часа вперед
    (Select CONVERT(datetime,comment, 104) as time_delay, 
value as zad_id from settings where 
param='DELAY_CAR' ) b

where substring(day_of_week,datepart (dw,DATEADD(mi,-datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),getdate()+1) ),1)='1' 

 and period_date_time>=getdate()+1 

and a.code=b.zad_id)
,t7 as (select 
distinct
code as id
select * from    
from CAR a, 
 --zaderg те рейсы, что без задержек, но с периодами навигации. 
    (Select CONVERT(datetime,comment, 104) as time_delay, 
value as zad_id from settings where 
param='DELAY_CAR' ) b

where substring(day_of_week,datepart (dw,DATEADD(mi,-datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),getdate()) ),1)='1' 

 and period_date_time>=getdate() 

and a.code<>b.zad_id)



where  ( ( case 
    when DATEADD(mi,datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 104),104),time_delay),date_time)>
date_time then DATEADD(mi,datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),date_time)  
    else date_time
    end  between getdate() and getdate()+1 and day_of_week='0000000') or
    /*(
    substring(day_of_week,datepart (dw,DATEADD(mi,-datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),getdate()) ),1)='1' 

 and period_date_time>=getdate()
    ) or
    (
    substring(day_of_week,datepart (dw,DATEADD(mi,-datediff(mi, convert(datetime,CONVERT(varchar(10), time_delay, 
104),104),time_delay),getdate())+1 ),1)='1' 

 and period_date_time>=getdate()+1
    )*/
      code in (select * from t5) or code in (select * from t6) or code in (select * from t7))
 order by  date_time_delay
2 мар 12, 11:43    [12182081]     Ответить | Цитировать Сообщить модератору
 Re: SQL вычислить дату в промежутке с учетом дополнительного времени  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
1. Прочитать: https://www.sql.ru/forum/actualthread.aspx?tid=127456
2. Нормально сформулировать задачу
3. Подготовить скрипты, тестовые данные и ожидаемый результат.
Дальше видно будет.
2 мар 12, 15:51    [12184361]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить