使用SQL Server 2005我有一个包含日期时间值的字段.
我想要做的是创建2个查询:
可能有一个简单的解决方案,但我一直在用我能找到的各种样品打砖墙,有什么想法吗?
提前致谢.
虽然其他答案都有效,但它们都会遇到同样的问题:它们会对列应用转换,因此永远不会在该列上使用索引.
要在没有转换的情况下搜索日期,您需要一些内置函数和一些数学运算.示例如下:
--create a table to hold our example values
create table #DateSearch
(
TheDate datetime not null
)
insert into #DateSearch (TheDate)
--today
select getdate()
union all
--a month in advance
select dateadd(month, 1, getdate())
union all
--a year in advance
select dateadd(year, 1, getdate())
go
--declare variables to make things a little easier to see
declare @StartDate datetime, @EndDate datetime
--search for "same month+year as current date"
select @StartDate = dateadd(month, datediff(month, 0, getdate()), 0), @EndDate = dateadd(month, datediff(month, 0, getdate()) + 1, 0)
select @StartDate [StartDate], @EndDate [EndDate], TheDate from #DateSearch
where TheDate >= @StartDate and TheDate < @EndDate
--search for "same year as current date"
select @StartDate = dateadd(year, datediff(year, 0, getdate()), 0), @EndDate = dateadd(year, datediff(year, 0, getdate()) + 1, 0)
select @StartDate [StartDate], @EndDate [EndDate], TheDate from #DateSearch
where TheDate >= @StartDate and TheDate < @EndDate
Run Code Online (Sandbox Code Playgroud)
该声明为避免转换所做的是找到大于或等于当前时间段(月或年)开始的所有值,并且所有值小于下一个(无效)时间段的开头.这解决了我们的索引问题,并且还减轻了与DATETIME类型中的3ms舍入相关的任何问题.
归档时间: |
|
查看次数: |
21706 次 |
最近记录: |