Как я могу выполнить запрос для всех дат, превышающих определенную дату в SQL Server?

Я пытаюсь:

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

A.Date выглядит так: 2010-03-04 00:00:00.000

Однако это не работает.

Кто-нибудь может дать ссылку, почему?

Ответ 1

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

В вашем запросе 2010-4-01 рассматривается как математическое выражение, поэтому по существу оно читает

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

(2010 minus 4 minus 1 is 2005 Преобразование его в правильный datetime и использование одинарных кавычек устранит эту проблему.)

Технически, синтаксический анализатор может позволить вам уйти с

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

он выполнит преобразование для вас, но, на мой взгляд, он менее читабельен, чем явно преобразовывается в datetime для программиста по обслуживанию, который будет после вас.

Ответ 2

Попробуйте включить дату в строку символов.

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

Ответ 3

Мы можем использовать, как показано ниже,

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

Ответ 4

DateTime start1 = DateTime.Parse(txtDate.Text);

SELECT * 
FROM dbo.March2010 A
WHERE A.Date >= start1;

Сначала конвертируйте TexBox в Datetime, затем... используйте эту переменную в запросе

Ответ 5

Подводя итог, правильный ответ.....

выберите * из базы данных, где Дата> = '20100401' (формат даты ггггммдд)

Это позволит избежать проблем с другими языковыми системами и будет использовать индекс