Einfache DateTime-SQL-Abfrage


82

Wie frage ich das DateTime-Datenbankfeld innerhalb eines bestimmten Bereichs ab?

Ich verwende SQL Server 2005

Fehlercode unten

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM

Beachten Sie, dass ich Zeilen innerhalb eines bestimmten Zeitbereichs abrufen muss. Beispiel: 10 Minuten Zeitbereich.

Derzeit gibt SQL mit falscher Syntax in der Nähe von '12' zurück. "


2
Die Antwort von clyc ist richtig: Sie müssen Anführungszeichen hinzufügen. Ich habe diesen Fehler schon einmal gemacht, denn wenn Sie dies where date = 1/12/2011zum Beispiel tun , scheint es zu funktionieren, aber teilen Sie tatsächlich den 12.01.2011 und erhalten Sie Null und behandeln Sie dann Null als den minimal möglichen Datum / Uhrzeit-Wert.
John Gibb

Antworten:


115

Sie haben ein einfaches Anführungszeichen verpasst:

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

Es wird außerdem empfohlen, das ISO8601-Format JJJJ-MM-TTThh: mm: ss.nnn [Z] zu verwenden, da dieses nicht von der lokalen Kultur Ihres Servers abhängt.

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'

Funktioniert nicht so gut Nachricht 242, Ebene 16, Status 3, Zeile 1 Die Konvertierung eines char-Datentyps in einen datetime-Datentyp führte zu einem datetime-Wert außerhalb des Bereichs.
Über

@overule - versuchen Sie es mit dem zweiten Beispiel
Alex Aza

@overule - Stellen Sie außerdem sicher, dass Ihre Spalte den Datums- / Uhrzeittyp hat.
Alex Aza

3
@Eric - yyyymmdd hat keine Zeit.
Alex Aza

8

Sie benötigen Anführungszeichen um die Zeichenfolge, die Sie als Datum ausgeben möchten, und Sie können auch ZWISCHEN hier verwenden:

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

In der Antwort auf die folgende Frage finden Sie Beispiele zum expliziten Konvertieren von Zeichenfolgen in Datumsangaben unter Angabe des Formats:

Konvertierung von SQL Server-Zeichenfolgen in Datumsangaben


Gleicher Fehler wie oben. Meldung 242, Ebene 16, Status 3, Zeile 1 Die Konvertierung eines char-Datentyps in einen datetime-Datentyp führte zu einem datetime-Wert außerhalb des Bereichs. Ich bin ziemlich verwirrt.
Über

Oh, ich habe gerade Ihre Datums- und Uhrzeitangabe kopiert. Sie haben 25/05, aber es wird wahrscheinlich Monat / Datum erwartet. Wechseln Sie also beide um. Ich habe meine Antwort bearbeitet und hier auf SO eine gute Frage verlinkt, die zeigt, wie Zeichenfolgen explizit in Datumsangaben konvertiert werden
Milimetric

6

Dies hat bei mir sowohl in SQL Server 2005 als auch in 2008 funktioniert:

SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
  AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}

5

Sie können den folgenden Code ausführen

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

1
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

Wenn dies nicht funktioniert, schreiben Sie bitte Ihre Tabelle aus und veröffentlichen Sie sie hier. Dies hilft uns, Ihnen schnell die richtige Antwort zu geben.


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

1

Andere haben bereits gesagt, dass Datumsliterale in SQL Server in einfache Anführungszeichen gesetzt werden müssen, aber ich wollte hinzufügen, dass Sie Ihr Monat / Tag-Verwechslungsproblem auf zwei Arten lösen können (dh das Problem, bei dem 25 als Monat und 5 als Monat angesehen wird Tag) :

  1. Verwenden Sie einen expliziten, Convert(datetime, 'datevalue', style)bei dem der Stil einer der numerischen Stilcodes ist (siehe Umwandeln und Konvertieren) . Der Stilparameter dient nicht nur zum Konvertieren von Datumsangaben in Zeichenfolgen, sondern auch zum Bestimmen, wie Zeichenfolgen in Datumsangaben analysiert werden.

  2. Verwenden Sie ein regionunabhängiges Format für Daten, die als Zeichenfolgen gespeichert sind. Die von mir verwendete ist 'yyyymmdd hh: mm: ss' oder das ISO-Format yyyy-mm-ddThh:mi:ss.mmm. Basierend auf Experimenten gibt es KEINE andere sprachinvariante Formatzeichenfolge. (Obwohl ich denke, dass Sie die Zeitzone am Ende einfügen können, siehe den obigen Link).


0

Öffnen Sie die Access-Datei, in die Sie SQL-Daten exportieren möchten. Löschen Sie alle vorhandenen Abfragen. Jedes Mal, wenn Sie den SQL Server-Importassistenten ausführen, wird in der Access-Datenbank eine Abfrage erstellt, die gelöscht werden muss, bevor Sie den SQL-Exportassistenten erneut ausführen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.