Jak zapytać o pole bazy danych DateTime w określonym zakresie?
Używam SQL SERVER 2005
Kod błędu poniżej
SELECT *
FROM TABLENAME
WHERE DateTime >= 12/04/2011 12:00:00 AM
AND DateTime <= 25/05/2011 3:53:04 AM
Pamiętaj, że muszę uzyskać wiersze w określonym przedziale czasu. Przykład, zakres czasu 10 minut.
Obecnie kod SQL powraca z nieprawidłową składnią w pobliżu „12”. "
where date = 1/12/2011
na przykład będzie wyglądał, że zadziała, ale w rzeczywistości podziel 1/12/2011 i otrzymaj zero, a następnie potraktuj zero jako minimalną możliwą wartość daty i godziny.Odpowiedzi:
Przegapiłeś pojedynczy cudzysłów:
SELECT * FROM TABLENAME WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'
Zalecane jest również użycie formatu ISO8601 RRRR-MM-DDThh: mm: ss.nnn [Z], ponieważ ten nie będzie zależał od lokalnej kultury serwera.
SELECT * FROM TABLENAME WHERE DateTime >= '2011-04-12T00:00:00.000' AND DateTime <= '2011-05-25T03:53:04.000'
źródło
Potrzebujesz cudzysłowów wokół ciągu, który próbujesz przedstawić jako datę, możesz również użyć BETWEEN tutaj:
SELECT * FROM TABLENAME WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'
Zobacz odpowiedź na następujące pytanie, aby zapoznać się z przykładami, jak jawnie konwertować ciągi znaków na daty podczas określania formatu:
Sql Server string do konwersji daty
źródło
To zadziałało dla mnie zarówno w SQL Server 2005, jak i 2008:
SELECT * from TABLE WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'} AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}
źródło
Możesz wykonać poniższy kod
SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14
źródło
SELECT * FROM TABLENAME WHERE [DateTime] >= '2011-04-12 12:00:00 AM' AND [DateTime] <= '2011-05-25 3:35:04 AM'
Jeśli to nie zadziała, proszę skryptuj swoją tabelę i opublikuj ją tutaj. pomoże nam to szybko uzyskać prawidłową odpowiedź.
źródło
select getdate() O/P ---- 2011-05-25 17:29:44.763 select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM' O/P --- 22/06/1432 5:29:44:763PM
źródło
Inni już powiedzieli, że literały daty w SQL Server wymagają ujęcia w pojedyncze cudzysłowy, ale chciałem dodać, że możesz rozwiązać problem pomieszania miesiąca / dnia na dwa sposoby (to znaczy problem, w którym 25 jest postrzegane jako miesiąc, a 5 jako dzień):
Użyj jawnego,
Convert(datetime, 'datevalue', style)
gdzie styl jest jednym z numerycznych kodów stylów, zobacz Przesyłanie i konwertowanie . Parametr style służy nie tylko do konwertowania dat na ciągi, ale także do określania, w jaki sposób ciągi są przetwarzane na daty.Użyj formatu niezależnego od regionu dla dat przechowywanych jako ciągi. Zastosowanie jednego ja jest „hh rrrrmmdd: mm: ss”, lub rozważyć formacie ISO,
yyyy-mm-ddThh:mi:ss.mmm
. Opierając się na eksperymentach, NIE ma innego niezmiennego języka ciągu formatu. (Chociaż myślę, że na końcu możesz uwzględnić strefę czasową, zobacz powyższy link).źródło
Otwórz plik dostępu, do którego próbujesz wyeksportować dane SQL. Usuń wszystkie dostępne zapytania. Za każdym razem, gdy uruchamiasz Kreatora importu SQL Server, nawet jeśli się to nie powiedzie, tworzy on zapytanie w bazie danych Access, które musi zostać usunięte przed ponownym uruchomieniem Kreatora eksportu SQL.
źródło