Как я могу выполнить запрос для всех дат, превышающих определенную дату в 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' (формат даты ггггммдд)
Это позволит избежать проблем с другими языковыми системами и будет использовать индекс