Sprawdzenie przedziału daty MSSQL

0

Witam,
chciałbym dodać do istniejącej procedury warunek wybierania tych rekordów, które mieszczą się w przedziale czasu który jest przekazywany w parametrze.
Problem jest w tym, że jeżeli dane nie zostały wybrane w programie to mają się pokazać dane w każdym przedziale.

Kolumna przechowująca dane w bazie:

  • DataUpdatu.

Jako parametr są przekazywane dwie wartości

  • @cDataOd

  • @cDataDo.

Próbowałem coś na podobe poniższego przykładu ale błąd jest przy warunku BETWEEN

 
SELECT ....
FROM ...
WHERE CASE WHEN @cData= '' then 1 ELSE BETWEEN @cDataOd AND @cDataDo END = 1
2
SELECT ....
FROM ...
WHERE DataUpdatu BETWEEN coalesce(@cDataOd, dateadd(year, -100, getdate())) AND coalesce(@cDataDo, dateadd(year, 100, getdate()))

Można jeszcze kombinować z nullem, ale to nie jest efektywne rozwiązanie...

SELECT ....
FROM ...
WHERE ((@cDataOd is null) and (@cDataDo is null)) or (DataUpdatu between @cDataOd and @cDataDo)

A najlepiej to w ogóle pozbyć się where, jeśli daty nie mają być sprawdzane.

Poza tym, DataUpdatu - naprawdę? ;-)

0

@wloochacz A jeśli data ma nie być sprawdzana to jak się pozbyć warunku ?
W klauzuli WHERE są sprawdzane jeszcze inne warunki.

 
WHERE 
....
AND
....
IF (@cDataOd <> '') AND (@cDataDo <> '')
begin
AND DataUpdatu BETWEEN @cDataOd AND @cDataDo
end;

Tutaj wyrzuca błąd przy AND.

1 użytkowników online, w tym zalogowanych: 0, gości: 1