2015-01-23 5 views
0

Я использую следующий запрос, чтобы отображать записи в моих таблицах, где дата расположена на текущей неделе. Мне нужно изменить его, чтобы показывать только текущую дату до конца недели, а не неделю недели.Только даты с текущей недели

SET DATEFIRST 1 
SELECT distinct Initials 
FROM Scheme 
WHERE CONVERT(datetime, Dato, 105) >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND convert(datetime, Dato, 105) < dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND RoomId = ? AND Initials IS NOT NULL 
+3

Просьба указать dbms. (Многие продукты dbms не следуют спецификации ANSI SQL, когда дело доходит до обработки даты/времени.) – jarlh

+1

Вам нужно уточнить свой смысл недели ... начинается ли неделя в воскресенье, понедельник и т. Д.? – gvee

+1

Если ваш существующий код работает в течение текущей недели, не можете ли вы просто опустить dateadd в файле morethan/equals, чтобы изменить его, чтобы он не начинался с начала недели? (date, 1-datepart (dw, getdate()), CONVERT (date, getdate()) 'только с' CONVERT (date, getdate()) ') –

ответ

0

dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) Это означает: добавить 1-datepart(dw, getdate()) дней текущей даты. Это означает 1-datepart(dw, getdate()): перейти к дате начала текущей недели.

Но вам нужна только текущая дата CONVERT(date,getdate()).

Просто измените свой код:

SET DATEFIRST 1 
SELECT distinct Initials 
FROM Scheme 
WHERE CONVERT(datetime, Dato, 105) >= CONVERT(date,getdate()) 
AND convert(datetime, Dato, 105) < dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND RoomId = ? AND Initials IS NOT NULL 
+0

Очень приятно. Спасибо Giorgi :) – Stefan

1

немного отличается, но более эффективный метод:

SELECT distinct Initials 
FROM Scheme 
WHERE Dato >= cast(current_timestamp as date) -- currentdate 
AND Dato < dateadd(d, datediff(d, -7, current_timestamp)/7*7, 0)--end of week 
AND RoomId = ? AND Initials IS NOT NULL 

Я предполагаю, что Дато определяется как дата или даты-времени. В противном случае вы можете столкнуться с некоторыми проблемами производительности, и это не сработает.

Смежные вопросы