我尝试:

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

a .日期如下:2010-03-04 00:00:00.000

然而,这并没有起作用。

谁能提供一个原因的参考?


当前回答

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

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

其他回答

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 - 4 - 1 = 2005 将其转换为适当的日期时间,并使用单引号将修复此问题。)

从技术上讲,解析器可能允许您使用

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

它将为您完成转换,但在我看来,它不如显式转换为DateTime的维护程序员的可读性。

我们也可以在下面用like

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

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

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

首先,您需要在转换前将两个日期转换为相同的格式

SELECT * 
FROM dbo.March2010 A
WHERE CONVERT(DATE, A.Date) >= 2010-04-01;
DateTime start1 = DateTime.Parse(txtDate.Text);

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

首先将TexBox转换为日期时间,然后....在查询中使用该变量