Я думаю, вам не нужно иметь параметр.Я никогда не писал такой запрос, но вы можете сказать «DATEPART (hh, GETDATE ())» и «DATEPART (mm, GETDATE ())», чтобы получить часы и минуты, соответственно.И вы можете включить тесты на то, какой час это в ваших запросах.
Вы можете использовать это, чтобы избавиться от вашего оператора if и параметра.Прямо сейчас у вас есть:
WHERE Shift = 3 AND PartNumber <>''
Концептуально, если бы вы могли сказать «ГДЕ сдвиг = независимо от того, какой сдвиг сейчас », это бы сработало.В SQL вы используете оператор CASE.Есть две формы;Вы можете прочитать об этом в Google, я собираюсь показать форму "искали" ниже.
Если бы это было просто вопросом, две смены, скажем, с полуночи до 14 часов, это 1, а другие времена смены.2, вы хотите знать, если час <14 или нет.Вы могли бы сказать: </p>
WHERE shift = CASE WHEN DATEPART(hh, GETDATE()) < 14 THEN 1 ELSE 2 END AND partNubmer <> ''
Имеет ли это смысл?В зависимости от того, когда он был запущен, вы получите либо shift = 1, либо shift = 2.
SELECT t.ProductionDate, t.Shift, t.LineNumber, t.Cart, t.CavityPosition, t.ProgramNumber, t.PartNumber,t.Cavity
FROM tblTransactionDetail t
JOIN tblLPCurrentOnline c
on t.Cart=c.Fixture
AND t.ProgramNumber=c.Program
AND t.LineNumber=c.Linenumber
WHERE PartNumber <>'' AND
CASE WHEN EXPRESSION_THAT_RETURNS_TRUE_DURING_SHIFT_1 THEN 1
EXPRESSION_THAT_RETURNS_TRUE_DURING_SHIFT_2 THEN 2
ELSE 3 END
Здесь, кажется, удобный способ узнать, что такое сдвиг, это спросить: «Что будетчасовая часть текущего времени будет через 20 минут? "И на сервере sql, чтобы получить это число, вы говорите:
SELECT DATEPART( hh, DATEADD(mi, 20, GETDATE()))
Итак, ваше выражение может быть
WHERE PartNumber <>'' AND
CASE WHEN DATEPART( hh, DATEADD(mi, 20, GETDATE())) BETWEEN 7 AND 15 THEN 1
WHEN DATEPART( hh, DATEADD(mi, 20, GETDATE())) BETWEEN 16 AND 22 THEN 2 -- 4pm to 11:59:59...
ELSE 3 END
Надеюсь, это сработает.Вы можете попробовать тесты, указав в качестве части даты секунды, а не часы, ss - символ, используемый для секунд.