424

我正在努力:

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

A.Date好像:2010-03-04 00:00:00.000

但是,这是行不通的。

任何人都可以提供参考为什么?

4

7 回答 7

579
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为您之后的维护程序员显式转换为 a 。

于 2012-05-17T20:57:20.653 回答
70

尝试将您的日期包含在字符串中。

 select * 
 from dbo.March2010 A
 where A.Date >= '2010-04-01';
于 2012-05-17T20:56:53.460 回答
21

我们也可以像下面这样使用

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';
于 2017-03-23T05:21:04.103 回答
8

综上所述,正确答案是:

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

这将避免其他语言系统的任何问题,并将使用索引。

于 2019-07-12T08:48:10.030 回答
3
DateTime start1 = DateTime.Parse(txtDate.Text);

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

首先将 TexBox 转换为 Datetime 然后....将该变量用于查询

于 2016-03-09T18:54:32.840 回答
1

在您的查询中,您没有在日期周围使用单引号。这就是问题所在。但是,您可以使用以下任何查询来比较日期

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' )
于 2021-11-08T17:24:47.227 回答
0

日期格式对我没有问题(Mydate的数据类型是datetime):
Where Mydate>'10/25/2021'或者Where Mydate>'2021-10-25'
但如果添加时间,上述答案不起作用。
这是我的工作:
where cast(Mydate as time)>'22:00:00'
如果您的查询需要日期,请添加日期,例如:
where cast(Mydate as time)>'22:00:00' and Mydate='10/25/2021'

于 2021-10-26T15:13:07.777 回答