По какой-то причине я не могу использовать функции SQL в будние дни в своей организации, поэтому мне нужна помощь с обходным путем. У меня есть код SQL, который должен запрашивать предыдущий будний день. Вот что мы сейчас используем:

select p.businessDate, p.accountNumber (more fields, but unecessary)
from Table p, 
where p.businessDate = dateadd(DAY, -1, today())

Проблема в том, что по понедельникам этот запрос извлекает данные с воскресенья, когда они нам нужны для пятницы. Есть ли способ обойтись без использования dateadd (WEEKDAY, -1, today ())? Этот код запускается автоматически с понедельника по пятницу, ежедневно.

0
shadaet 11 Окт 2021 в 23:19

2 ответа

Лучший ответ

Поскольку вы сказали, что можете использовать DATEPART, оператор case проверяет, является ли текущий день понедельником, если это так, он вычитает 3 дня, чтобы получить пятницу, иначе он вычитает 1 день, DATEPART возвращает числовое значение начиная с 1 для воскресенья и переходит к 7 для субботы, так как понедельник - это дата, вызывающая беспокойство, которую мы проверяем на предмет значения 2, это синтаксис SQL Server .

select p.businessDate, p.accountNumber (more fields, but unecessary)
from Table p, 
where businessDate = CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 2 
THEN DATEADD(DAY, -3, GETDATE()) 
ELSE DATEADD(DAY, -1, GETDATE()) END

Документация DATEPART - datepart-transact-sql

0
Ryan Wilson 11 Окт 2021 в 20:38

Я нашел кое-что здесь что, я думаю, может вам помочь.

Если вы можете использовать DATENAME, вы можете проверить, является ли имя текущей даты 'Monday'. Если это так, то вместо dateadd(DAY, -1, today()) вы можете использовать dateadd(DAY, -3, today()).

0
Matt Croak 11 Окт 2021 в 20:24