使用SQL Server 2005我有一个包含日期时间值的字段。
我要做的是创建2个查询:
可能有一个简单的解决方案,但是我一直在使用我能找到的各种样品打砖墙,有什么想法吗?
提前致谢。
答案 0 :(得分:7)
比较日期部分:
WHERE YEAR( columnName ) = YEAR( getDate() )
答案 1 :(得分:5)
虽然其他答案都有效,但它们都会遇到同样的问题:它们会对列应用转换,因此永远不会在该列上使用索引。
要搜索没有转换的日期,您需要一些内置函数和一些数学。示例如下:
--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
该声明为避免转换所做的是找到大于或等于当前时间段(月或年)开头的所有值,并且所有值小于下一个(无效)时间的开头期。这解决了我们的索引问题,并且还减轻了与DATETIME类型中的3ms舍入相关的任何问题。
答案 2 :(得分:2)
SELECT * FROM atable
WHERE
YEAR( adate ) = YEAR( GETDATE() )
AND
MONTH( adate ) = MONTH( GETDATE() )
答案 3 :(得分:2)
听起来像DATEDIFF正如你所需要的那样:
-- #1 same month and year
SELECT *
FROM your_table
WHERE DATEDIFF(month, your_column, GETDATE()) = 0
-- #2 same year
SELECT *
FROM your_table
WHERE DATEDIFF(year, your_column, GETDATE()) = 0
答案 4 :(得分:0)
使用datepart函数可以拉出所需的位:
declare @d1 as datetime
declare @d2 as datetime
if datepart(yy, @d1) = datepart(yy, @d2) and datepart(mm, @d1) = datepart(mm, @d2) begin
print 'same'
end
答案 5 :(得分:0)
你可以使用这样的东西
A)
select *
from table
where MONTH(field) = MONTH(GetDATE())
and YEAR(field) = YEAR(GetDATE())
b)中
select *
from table
where YEAR(field) = YEAR(GetDATE())