518 Stimmen

Wie kann ich in SQL Server alle Daten abfragen, die größer als ein bestimmtes Datum sind?

Ich versuche es:

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;

A.Date sieht so aus: 2010-03-04 00:00:00.000

Dies funktioniert jedoch nicht.

Kann jemand einen Hinweis darauf geben, warum?

678voto

David Punkte 70550
select *  
from dbo.March2010 A 
where A.Date >= Convert(datetime, '2010-04-01' )

In Ihrer Anfrage, 2010-4-01 wird wie ein mathematischer Ausdruck behandelt, so dass er im Wesentlichen lautet

select *  
from dbo.March2010 A 
where A.Date >= 2005; 

( 2010 minus 4 minus 1 is 2005 Die Umwandlung in eine richtige datetime und die Verwendung einfacher Anführungszeichen behebt dieses Problem).

Technisch gesehen könnte der Parser Ihnen erlauben, mit

select *  
from dbo.March2010 A 
where A.Date >= '2010-04-01'

wird die Konvertierung für Sie durchgeführt, aber meiner Meinung nach ist es weniger lesbar als die explizite Konvertierung in eine DateTime für den Wartungsprogrammierer, der nach Ihnen kommen wird.

90voto

SliverNinja - MSFT Punkte 29965

Versuchen Sie, Ihr Datum in eine Zeichenkette einzuschließen.

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';

29voto

dush88c Punkte 1614

Wir können auch wie folgt vorgehen

SELECT * 
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';

SELECT * 
    FROM dbo.March2010 A
    WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';

25voto

In Ihrer Abfrage haben Sie das Datum nicht in einfache Anführungszeichen gesetzt. Das war das Problem. Wie auch immer, Sie können eine der folgenden Abfragen verwenden, um das Datum zu vergleichen

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= '2010-04-01';

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= CAST('2010-04-01' as Date);

SELECT *  
FROM dbo.March2010 A 
WHERE A.Date >= Convert(datetime, '2010-04-01' )

10voto

Dan Punkte 91

Zusammenfassend lässt sich sagen, dass die richtige Antwort lautet:

select * from db where Date >= '20100401'  (Format of date yyyymmdd)

Dadurch werden Probleme mit anderen Sprachsystemen vermieden und der Index wird verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X