Hoe vraag ik naar alle datums die groter zijn dan een bepaalde datum in SQL Server?

Ik probeer:

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

A.Dateziet er als volgt uit: 2010-03-04 00:00:00.000

Dit werkt echter niet.

Kan iemand een referentie geven waarom?


Antwoord 1, autoriteit 100%

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

In uw zoekopdracht wordt 2010-4-01behandeld als een wiskundige uitdrukking, dus in wezen luidt het

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

(2010 minus 4 minus 1 is 2005
Het omzetten naar een juiste DateTimeen het gebruik van enkele aanhalingstekens lost dit probleem op.)

Technisch gezien kunt u met de parser wegkomen

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

het zal de conversie voor u doen, maar naar mijn mening is het minder leesbaar dan expliciet converteren naar een DateTimevoor de onderhoudsprogrammeur die na u komt.


Antwoord 2, autoriteit 12%

Probeer je date in een tekenreeks te plaatsen.

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

Antwoord 3, autoriteit 3%

We kunnen ook gebruiken zoals hieronder

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';

Antwoord 4

Om het allemaal samen te vatten, het juiste antwoord is:

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

Dit voorkomt problemen met andere taalsystemen en gebruikt de index.


Antwoord 5

DateTime start1 = DateTime.Parse(txtDate.Text);
SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

Eerst TexBox converteren naar Datetime en dan….gebruik die variabele in de Query

Other episodes