不考虑时间比较日期(MSSQL)

不考虑时间比较日期(MSSQL),sql,stored-procedures,Sql,Stored Procedures,我使用这个存储过程返回特殊日期的数据。我的QueueDate类型是datetime,但当我希望在Where子句中使用=时,它返回0,我希望所有在一天内独立于字段时间的字段 ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE] AS BEGIN declare @date2 datetime set @date2= '2012-09-21' select COUNT(QueueID) , sum(case when QueueNumIn != 0 TH

我使用这个存储过程返回特殊日期的数据。我的QueueDate类型是datetime,但当我希望在Where子句中使用=时,它返回0,我希望所有在一天内独立于字段时间的字段

ALTER PROCEDURE [dbo].[SP_GET_QUEUESINFO_BY_DATE]
AS
BEGIN
declare @date2 datetime
set @date2= '2012-09-21'
select COUNT(QueueID) ,
sum(case when QueueNumIn != 0 THEN 1 else 0 end) as 'InQueue',
sum(case when QueueNumOut != 0 THEN 1 else 0 end) as  'OutQueue'
from Queue where QueueDate >= @date2 -- QueueDate = @date2
END

您可以
强制转换列名,将数据类型从
DATETIME
更改为
DATE
(2008+之前的版本)。试试看

SQL Server,对吗

要仅比较
DateTime
值的日期组件和您正在使用的SQL Server 2008或更高版本,可以按说明转换为
date
数据类型。像这样的事情应该对你有帮助:

select *
from foo
where convert(date,foo.someDateTimeColumn) = '2012-10-27'
对于任何版本的SQL Server,以下操作将起作用:

select *
from foo
where convert(datetime,convert(varchar,foo.someDateTimeColumn,112),112) = '2012-10-27'
上面使用112样式将日期时间值转换为紧凑形式的ISO 8601日期字符串“yyyymmdd”,然后将其转换回日期时间值

或者,对于任何版本的SQL Server,您都可以针对以下时间段进行测试:

declare
  @dtNow datetime
set @dtNow = current_timestamp

declare
  @TodayStartOfDay datetime ,
  @TodayEndOfDay   datetime
set @TodayStartOfDay = convert(datetime,convert(varchar,@dtNow,112),112)
set @TodayEndOfDay   = dateadd(ms,-3,datetime(day,1,@dtFrom))

...

select *
from foo
where foo.someDateTimeColumn between @TodayStartOfDay and @TodayEndOfDay
这种方法的优点是DateTime列上的任何索引都可以由查询优化器使用

select *
from foo
where convert(datetime,convert(varchar,foo.someDateTimeColumn,112),112) = '2012-10-27'
declare
  @dtNow datetime
set @dtNow = current_timestamp

declare
  @TodayStartOfDay datetime ,
  @TodayEndOfDay   datetime
set @TodayStartOfDay = convert(datetime,convert(varchar,@dtNow,112),112)
set @TodayEndOfDay   = dateadd(ms,-3,datetime(day,1,@dtFrom))

...

select *
from foo
where foo.someDateTimeColumn between @TodayStartOfDay and @TodayEndOfDay