2014-06-12 3 views
8

ich ziemlich bin neu in SQL und hoffen, dass jemand hier mir dabei helfen kann:SQL Server: wie Datensätze auszuwählen, die mit bestimmten Datum aus Datetime-Spalte

Ich habe eine Tabelle mit einer Spalte dateX als Datetime-Format und enthält Standard Termine. Wie kann ich alle Datensätze aus dieser Tabelle auswählen, wobei dieses DatumX einem bestimmten Datum entspricht, z. 9. Mai 2014?

Ich habe Folgendes versucht, aber das gibt nichts zurück, auch wenn ich mehrere Datensätze mit diesem Datum habe.

SELECT  * 
FROM   dbo.LogRequests 
WHERE  (CONVERT(VARCHAR(10), dateX, 101) = '09/05/14') 

Edit: In der Datenbank das obige Beispiel sieht wie folgt aus, unter Verwendung von SQL 2012: 2014-05-09 00:00:00.000

Vielen Dank für jede Hilfe bei diesem, Mike.

+0

soll das denn 9. Mai oder 5. September sein? – Lamak

+0

9. Mai wie gesagt. – Mike

+1

Sie haben Recht. Und dennoch zeigt die Dokumentation für [SQL Server Cast and Convert] (http://msdn.microsoft.com/en-us/library/ms187928.aspx), dass das 101-Format "mm/dd/yyyy" ist, das sollten Sie " habe stattdessen 103 benutzt. Aber eine offene Reichweite ist die bessere Wahl. Und wenn jede Zeile '00: 00: 00.000' als Zeitteil hat, dann kannst du einfach folgendes verwenden:' dateX = '20140509'' – Lamak

Antwort

16

Der einfachste Weg ist, um ein Datum zu konvertieren:

SELECT * 
FROM dbo.LogRequests 
WHERE cast(dateX as date) = '2014-05-09'; 

Oft solche Ausdrücke die Verwendung eines Index ausschließt. Laut verschiedenen Quellen im Internet ist das Obige jedoch sargable (was bedeutet, dass es einen Index verwendet), wie beispielsweise this und this.

Ich würde geneigt sein, die folgenden zu verwenden, nur aus Gewohnheit:

SELECT * 
FROM dbo.LogRequests 
WHERE dateX >= '2014-05-09' and dateX < '2014-05-10'; 
+1

Lol, du hast mich mit der gleichen Antwort um 4 Sekunden geschlagen. :) Ich werde meine löschen ... –

+0

Vielen Dank dafür! Das funktioniert großartig. :) Wird so bald wie möglich akzeptieren. – Mike

0

SELECT * FROM LogRequests WHERE Besetzung (Datex als Datum) zwischen '2014.05.09' und ‚2014- 05-10 ';

1

für perfektes DateTime Spiel in SQL Server

SELECT ID FROM [Table Name] WHERE (DateLog between '2017-02-16 **00:00:00.000**' and '2017-12-16 **23:59:00.999**') ORDER BY DateLog DESC 
+0

Danke für die Verbesserung. –

Verwandte Themen