3

我有一个循环,它通过一些条目。在循环中,我得到了创建日期,我需要查找是否在同一天插入了条目。因此,例如,如果creation date = 2011-08-31 21:19:14.345,我需要选择创建日期介于2011-08-31 00:00:00.000和之间的所有行2011-08-31 23:59:59.999

如何使用 SQL 执行此操作?

4

3 回答 3

4

为了捕捉当天的所有时间,请执行以下操作:

SELECT * FROM MyTable
WHERE DateCreated >= @TheDate AND DateCreated < DATEADD(day, 1, @TheDate)

哪里@TheDate一定是没有时间的纯粹日期。即使DateCreated时间部分非常接近午夜,它也可以工作。

于 2011-12-06T18:34:54.927 回答
3

没有任何其他架构细节,如果这是 SQL Server 2K8+,你可以这样做:

DECLARE @CreationDate Date = '2011-08-31';

SELECT *
FROM SomeTable
WHERE CONVERT(Date, CreationDate) = @CreationDate;

通过转换为 adate而不是与您一起工作,datetime您会丢失时间组件并“标准化”您比较值的方式。

出于比较目的而丢失时间分量的另一种方法是:

DECLARE @CreationDate DateTime;
SELECT @CreationDate = '2011-08-31 21:19:14.345';

SELECT @CreationDate; -- 2011-08-31 21:19:14.345
SELECT @CreationDate = CONVERT(DateTime, FLOOR(CONVERT(Float, @CreationDate)));
SELECT @CreationDate; -- 2011-08-31 00:00:00.000

如果您没有date数据类型,您将使用它。

于 2011-12-06T18:26:03.113 回答
0

你可以试试这个:

SELECT * FROM SomeTable  
WHERE   
DAY(TDATE) = DAY(CreationDate)  
AND  
MONTH(TDATE) = MONTH(CreationDate)  
AND  
YEAR(TDATE) = YEAR(CreationDate)
于 2011-12-06T18:36:35.467 回答