Proste zapytanie SQL DateTime

86

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”. "

ove
źródło
2
clyc odpowiedź jest prawidłowa: musisz dodać cudzysłowy. Popełniłem ten błąd wcześniej, ponieważ jeśli to zrobisz, where date = 1/12/2011na 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.
John Gibb,

Odpowiedzi:

121

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'
Alex Aza
źródło
Nie działa tak dobrze Msg 242, poziom 16, stan 3, wiersz 1 Konwersja typu danych char na typ danych typu data-godzina spowodowała, że ​​wartość data-godzina była poza zakresem.
Ove
@overule - spróbuj użyć drugiego przykładu
Alex Aza
@overule - upewnij się również, że Twoja kolumna ma typ datetime.
Alex Aza,
3
@Eric - yyyymmdd nie ma czasu.
Alex Aza,
8

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

Milimetryczny
źródło
Ten sam błąd co powyżej. Msg 242, poziom 16, stan 3, wiersz 1 Konwersja typu danych char na typ danych typu data-godzina spowodowała, że ​​wartość data-godzina była spoza zakresu. Jestem naprawdę zdezorientowany.
Ove
och, właśnie skopiowałem twoją datę i godzinę, masz 25/05, ale prawdopodobnie oczekuje się miesiąca / daty, więc zamień je obie. Zredagowałem moją odpowiedź i
utworzyłem łącze
6

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'}
Jamaria
źródło
6

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
Abdul Rafey
źródło
1
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ź.

clyc
źródło
1
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
jack.mike.info
źródło
1

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ń):

  1. 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.

  2. 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).

ErikE
źródło
0

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.

Dan
źródło