Rabee Qabaha Ответов: 2

Получить данные текущей недели начало в субботу конец в пятницу


как я могу получить данные из sql server за текущую неделю, начиная с субботы и заканчивая пятницей, поэтому выберите все данные с субботы по пятницу за текущую неделю.

Я нашел этот код, но начал в воскресенье, и я не могу его изменить:

SELECT TOP (200) id, p_id, p_name, s_quantity, s_p_price, s_price, cost_price, profit, date, note, p_delete FROM filters_sold
WHERE (date >= DATEADD(day, 0 - DATEPART(dw, GETDATE()), CONVERT(date, GETDATE()))) AND (date < DATEADD(day, 7 - DATEPART(dw, GETDATE()), CONVERT(date, GETDATE())))


то что я хочу давайте скажем где мы находимся на этой неделе и сегодня воскресенье 22/1/2017
я хочу получить все данные с субботы 21/1/2017 по пятницу 27/1/2017.

затем, когда наступит следующая неделя, скажем, в следующую субботу 28/1/2017, я хочу, чтобы текущая неделя также началась в субботу 28/1/2017, закончившись в пятницу 3/2/2017 и так далее ..

код выше получает данные с субботы по пятницу но начало недели воскресенье как я могу сделать это в субботу

Что я уже пробовал:

<pre lang="SQL">SELECT TOP (200) id, p_id, p_name, s_quantity, s_p_price, s_price, cost_price, profit, date, note, p_delete FROM filters_sold
WHERE (date >= DATEADD(day, 0 - DATEPART(dw, GETDATE()), CONVERT(date, GETDATE()))) AND (date < DATEADD(day, 7 - DATEPART(dw, GETDATE()), CONVERT(date, GETDATE())))

Richard MacCutchan

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

Rabee Qabaha

Я пытался но не смог ты можешь показать мне как пожалуйста

Richard MacCutchan

У меня нет экземпляра SQL, чтобы попробовать его, так что вам придется работать над ним самостоятельно, экспериментируя. Просто измените 0 и 7 в приведенных выше утверждениях на необходимые значения и выполните некоторые тесты, чтобы проверить их правильность. Есть только одна или две комбинации, чтобы попробовать.

Rabee Qabaha

Я пытался, но не смог, спасибо

2 Ответов

Рейтинг:
2

Member 9831003

Не уверен, что мой ответ поможет вашему запросу, но ... попробуйте вот это

Установите свой первый день недели в соответствии с вашим выбором. Значение по умолчанию для us_english равно 7 (воскресенье)

Просто установите в запросе

SET DATEFIRST 1;

Значение первый день недели - 1 понедельник 2 вторник 3 среда 4 четверг 5 пятница 6 суббота 7 (по умолчанию, американский английский) воскресенье

Спасибо


Rabee Qabaha

@Member 9831003 здравствуйте, до сих пор я не мог найти решение, не могли бы вы мне помочь ??
пожалуйста, покажите мне, как это сделать в коде

Рейтинг:
0

RossMW

Я думаю, что проблема заключается в типе поля. Если это datetime, то он будет включать в себя значение времени, и, следовательно, вам нужно будет отфильтровать, где дата больше, чем конец предыдущего дня. В противном случае значение времени приведет к исключению всех субботних дат

напр.
день & gt; В прошлую пятницу и день & lt; в следующую субботу

т.е.

date > dateadd(day, - datepart(dw,getdate()) -1, getdate()) and Date < dateadd(day, 7 - datepart(dw,getdate()), getdate()) 


Rabee Qabaha

Да, поле даты-это Datetime, так что мне нужен cast ??
или просто использовать свой код ??

RossMW

Если предположить, что поле даты-это datetime, то все находится в формате даты и нет необходимости в приведении. Экспериментирование - ваш друг (в тестовой системе)