我有一个循环,它通过一些条目。在循环中,我得到了创建日期,我需要查找是否在同一天插入了条目。因此,例如,如果creation date = 2011-08-31 21:19:14.345
,我需要选择创建日期介于2011-08-31 00:00:00.000
和之间的所有行2011-08-31 23:59:59.999
如何使用 SQL 执行此操作?
我有一个循环,它通过一些条目。在循环中,我得到了创建日期,我需要查找是否在同一天插入了条目。因此,例如,如果creation date = 2011-08-31 21:19:14.345
,我需要选择创建日期介于2011-08-31 00:00:00.000
和之间的所有行2011-08-31 23:59:59.999
如何使用 SQL 执行此操作?
为了捕捉当天的所有时间,请执行以下操作:
SELECT * FROM MyTable
WHERE DateCreated >= @TheDate AND DateCreated < DATEADD(day, 1, @TheDate)
哪里@TheDate
一定是没有时间的纯粹日期。即使DateCreated
时间部分非常接近午夜,它也可以工作。
没有任何其他架构细节,如果这是 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
数据类型,您将使用它。
你可以试试这个:
SELECT * FROM SomeTable
WHERE
DAY(TDATE) = DAY(CreationDate)
AND
MONTH(TDATE) = MONTH(CreationDate)
AND
YEAR(TDATE) = YEAR(CreationDate)