MS SQL odejmowanie czasu

0

Cześć,
proszę o pomoc w napisaniu zapytania do bazy MS SQL.
Potrzebuję za bazy, która w kolumnie CZAS ma zapisaną godzinę, ale występuje ona zawsze w formacie: 1899-12-30 hh:mm:00
Chciałbym aby wykonaniem zapytania select były wszystkie rekordy, które mają godzinę o 3 wcześniejszą oraz 3 późniejszą od aktualnej

select * from TABELA where CZAS = getdate() /plus 3godziny/ or CZAS = getdate() /minus 3godziny/

Z góry dziękuję za pomoc

0

select * FROM Tabela WHERE CZAS = dateadd(HOUR, -3, getdate()) Or CZAS = dateadd(HOUR, 3, getdate())

Przy czym to na pewno ma być równa ? Tam są milisekudny, imho to nigdy nie będzie równe :)

0

Rzeczywiście chodzi o większe/mniejsze, ale to mniej istotne.

SELECT * FROM Tabela WHERE CZAS > dateadd(HOUR, -3, getdate()) AND CZAS < dateadd(HOUR, 3, getdate())

Dziękuję za odpowiedzi, ale problemem jest tutaj format godziny: 1899-12-30 hh:mm:00
czyli dziś o 12:00 zostałyby wyświetlone wszystkie rekordy, które mają datę 1899-12-30 i godzinę od 9:00 do 15:00

Przy rozwiązaniu BlackBad warunek nigdy nie zostanie spełniony, bo data w kolumnie CZAS to 1899-12-30 a data w getdate() zawsze będzie późniejsza
Chcę brać pod uwagę tylko godzinę z kolumny CZAS i wyświetlić rekordy, które mają godzinę w przedziele +/- 3 godziny.

1

Aaa czyli, że te Twoje 1899 to nie był ot z kija przykład tylko faktycznie masz taką "datę" ? Hmm no to zrób coś ala:


Convert(datetime,('1899'+right(getdate(),8)),102)

Czyli całość by wyglądała jak poniżej:

SELECT * FROM Tabela WHERE CZAS > dateadd(HOUR, -3, Convert(datetime,('1899-12-30'+right(getdate(),8)),102)) 
AND CZAS < dateadd(HOUR, 3, Convert(datetime,('1899-12-30'+right(getdate(),8)),102))
0

Cudo.
Dzięki za pomoc.

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