2015-10-22 7 views
1

Я пишу этот вопрос:Как включить часы в последний день недели в SQL сервере

SELECT 
    DATEADD(wk, DATEDIFF(wk, 0, vr_EmployeeLog.DateTimeStart), 0) period_start, 
    DATEADD(wk, DATEDIFF(wk, 0, vr_EmployeeLog.DateTimeStart), 6) period_end 
FROM 
    vr_EmployeeLog 

Я получаю результат:

period_start 2015-10-12 00:00:00.000 
period end  2015-10-18 00:00:00.000 

, но я получил запись на дату period_end 2015-10-18 01: 56: 00.000 AM и не включенный в результат.

Как я могу это достичь?

+0

Какой тип столбца? – Dai

+0

datetime column type – maxspan

+0

Мне нужно использовать DateADD и DateDiff. where не разрешено для меня – maxspan

ответ

0

Попробуйте использовать дни вместо недель.

SELECT 
    DATEADD(wk,DATEDIFF(wk,0,vr_EmployeeLog.DateTimeStart),0) period_start, 
    DATEADD(day,DATEDIFF(day,0,vr_EmployeeLog.DateTimeStart),7) period_end   
FROM vr_EmployeeLog 

Но выбрать данные через «диапазон дат» использовать комбинацию больше или равно, то меньше, чем (на следующий день)

SELECT * 
FROM vr_EmployeeLog 
WHERE vr_EmployeeLog.DateTimeStart >= '20151012' 
AND vr_EmployeeLog.DateTimeStart < '20151019' --<< "the next day" 

Не поддавайтесь искушению использовать «между» для этого, всегда используйте> = и <

лучшей практики с указанием даты и времени в диапазоне, чтобы избежать BETWEEN и всегда использовать форму:

WHERE col> = '20120101' И col < '20120201' Эта форма работает со всеми типами и всеми исключениями, независимо от того, применяется ли временная часть .

Itzik Ben-Gan

также

Bad habits to kick : mis-handling date/range queries

+0

Я не могу использовать предложение where для моего запроса, оно должно быть DateAdd с DateDiff – maxspan

+0

то же самое верно для выражения case; кстати, как вы должны задать вопрос - предоставить все ограничения (например, этот комментарий), затем предоставить образцы данных и ожидаемый результат. –

0

Я думаю, вы должны попробовать:

SELECT 
    DATEADD(wk,DATEDIFF(wk,0,DateTimeStart),0) period_start, 
    DATEADD(day, 6, DATEADD(wk,DATEDIFF(wk,0,DateTimeStart),0)) period_end 
FROM vr_EmployeeLog 

--ADD 6 days into period_start 
+0

это не сработало. дает тот же результат. – maxspan

+0

вы можете использовать преобразование или преобразование для преобразования вашего результата из типа даты и времени в тип даты –

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