不考虑时间比较日期(MSSQL)
我使用这个存储过程返回特殊日期的数据。我的QueueDate类型是datetime,但当我希望在Where子句中使用=时,它返回0,我希望所有在一天内独立于字段时间的字段不考虑时间比较日期(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
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