Mam start_date
i end_date
. Chcę uzyskać listę dat pomiędzy tymi dwiema datami. Czy ktoś może mi pomóc wskazać błąd w moim zapytaniu.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Oto Date
adatetime
zmienna.
sql
sql-server
tsql
datetime
sql-server-2005
Neeraj
źródło
źródło
between
powinien działać zgodnie z oczekiwaniami.Ponieważ data i godzina bez określonego odcinka czasu będzie miała wartość
date 00:00:00.000
, jeśli chcesz mieć pewność, że otrzymujesz wszystkie daty w swoim zakresie, musisz albo podać datę końcową, albo zwiększyć datę końcową i użyć<
.LUB
LUB
NIE używaj następujących danych, ponieważ mogą zwrócić niektóre rekordy z 2011/02/28, jeśli ich czasy to 00: 00: 00.000.
źródło
'2011/02/28 00:00:00.000'
?convert(date, Date) between '2011/02/25' and '2011/02/27'
(przynajmniej z najnowszym MS SQL Server).convert()
Część zajmie stripping część czasu i pomiędzy porównaniu wtedy działać zgodnie z oczekiwaniami.Spróbuj tego:
Wartości daty należy wpisać jako ciągi.
Aby upewnić się, że Twoje zapytanie na SQL Server 2008 i nowsze jest zabezpieczone na przyszłość,
Date
należy je zmienić, ponieważ jest to słowo zastrzeżone w późniejszych wersjach.Pamiętaj, że daty bez czasu przyjmują domyślnie północ, więc możesz nie mieć tam prawidłowej wartości.
źródło
Tutaj najpierw dodaj dzień do bieżącej daty końcowej
2011-02-28 00:00:00
, a następnie odejmij jedną sekundę, aby ustawić datę końcową2011-02-27 23:59:59
. W ten sposób możesz uzyskać wszystkie daty między podanymi interwałami.źródło
- jeśli typ danych jest inny
źródło
To zapytanie jest przydatne do pobierania wartości między bieżącą datą a następnymi 3 datami
To ostatecznie doda dodatkowe 3 dni bufora do bieżącej daty.
źródło
To jest bardzo stare, ale biorąc pod uwagę wiele doświadczeń, które miałem z datami, możesz rozważyć to: Ludzie używają różnych ustawień regionalnych, jako takie, niektóre osoby (i niektóre bazy danych / komputery, w zależności od ustawień regionalnych) mogą to przeczytać data 11.12.2016 jako 11 grudnia 2016 r. lub 12 listopada 2016 r. Co więcej, 16.11.12 dostarczony do bazy danych MySQL zostanie wewnętrznie przekonwertowany na 12 listopada 2016 r., natomiast baza danych Access działająca na komputerze regionalnym w Wielkiej Brytanii zinterpretuje i zapisz jako 16 listopada 2012.
Dlatego postanowiłem, że moje zasady będą jawne za każdym razem, gdy będę wchodzić w interakcje z datami i bazami danych. Dlatego zawsze dostarczam moje zapytania i kody programowania w następujący sposób:
Pamiętaj również, że Access zaakceptuje #, a zatem:
ale serwer MS SQL nie będzie, więc zawsze używam „” jak wyżej, co akceptują obie bazy danych.
A kiedy otrzymuję tę datę ze zmiennej w kodzie, zawsze przekształcam wynik na ciąg znaków w następujący sposób:
Piszę to, ponieważ wiem, że niektórzy programiści mogą nie być wystarczająco chętni, aby wykryć nieodłączną konwersję. Nie będzie błędu dla dat <13, tylko inne wyniki!
Jeśli chodzi o zadane pytanie, dodaj jeden dzień do ostatniej daty i wykonaj porównanie w następujący sposób:
źródło
źródło
Spróbuj umieścić daty między # # na przykład:
To zadziałało dla mnie.
źródło
jeśli jego data przypada za 24 godziny i zaczyna się rano, a kończy w nocy, należy dodać coś takiego:
źródło
najlepsze zapytanie dla wybranej daty między bieżącą datą a poprzednimi trzema dniami :
najlepsze zapytanie dla wybranej daty między bieżącą datą a następnymi trzema dniami :
źródło
Sprawdź poniżej Przykłady: zarówno pracujące, jak i niedziałające.
LUB
LUB
ORAZ poniżej nie działa:
źródło
możemy użyć między, aby wyświetlić dane z dwóch dat, ale przeszuka to całe dane i porówna, dzięki czemu nasz proces będzie spowolniony w przypadku dużych danych, więc sugeruję wszystkim, aby używali
datediff
:tutaj kalendarz to Tabela, dt jako zmienna daty początkowej, a dt2 to zmienna daty końcowej.
źródło
Lubię używać składni „1 MonthName 2015” dla dat, np .:
dla dat
źródło
Wybrałbym
Logika
>=
obejmuje całą datę początkową i<
wyklucza datę końcową, dlatego dodajemy jedną jednostkę do daty końcowej. Można to dostosować na miesiące, na przykład:źródło
źródło
Możesz spróbować tego SQL
źródło
Naprawdę wszystkie daty sql powinny być w formacie rrrr-MM-dd, aby uzyskać jak najdokładniejsze wyniki.
źródło
źródło
lepiej napisz w ten sposób:
źródło
źródło