2017-02-10 2 views
0

Я пытаюсь, чтобы в отчете показывались только те даты, в которых дата INVOICE - это предыдущий день, если сегодня не понедельник, и в этом случае он будет тянуть, если дата INVOICE - пятница.Заявление о заключении дела в разделе Where для датированного документа

Как следует из названия, моя попытка выполнить это заявление о случаях в моей статье where.

WHERE 
(case when datepart(dw,GETDATE()) <> 2 
then (INVOICE >= dateadd(day,datediff(day,1,GETDATE()),0)) 
else INVOICE >= dateadd(day,datediff(day,3,GETDATE()),0) end) 
and (case when datepart(dw,GETDATE()) <> 2 
then (INVOICE < dateadd(day,datediff(day,0,GETDATE()),0)) 
else INVOICE <dateadd(day,datediff(day,2,GETDATE()),0) end) 

Как вы, вероятно, можете сказать из кода выше, я полный нуб, когда дело доходит до запросов SQL, и это пронизано с синтаксическими ошибками. Что нужно скорректировать выше, чтобы заставить это работать? Или я смотрю на это совершенно неправильно?

ответ

2

Как о чем-то проще:

where (datepart(dw, GETDATE()) <> 2 and 
     cast(invoice as date) = cast(dateadd(day, -1, getdate()) as date) 
    ) or 
     (datepart(dw, GETDATE()) = 2 and 
     cast(invoice as date) = cast(dateadd(day, -3, getdate()) as date) 
    ) 

В общем, функции в предложении where предотвратить использование индексов. Одно исключение (единственное исключение?) - литьеdatetime значения к датам. Here - это блог на эту тему.

+0

Спасибо за знание, Гордон! Я получаю здесь синтаксическую ошибку: «Некорректный синтаксис рядом с« cast », ожидаемый« AS'. » – aLearningLady

+2

Измените' cast (dateadd (день, -1, getdate())) 'to' cast (dateadd (day, -1, getdate()) в качестве даты) 'и' cast (dateadd (день, -3, getdate())) 'to' cast (dateadd (день, -3, getdate()) в качестве даты) '@aLearningLady – scsimon

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