这可能是一个简单的where子句,但我想说,从columnX(这是datetime)我想要所有只有年份= 2010的行。
这样:
select * from mytable where Columnx =
答案 0 :(得分:36)
select * from mytable where year(Columnx) = 2010
关于索引使用(回答Simon的评论):
如果你有一个关于Columnx的索引,SQLServer WON'如果你使用函数" year"则使用它。 (或任何其他功能)。
有两种可能的解决方案,一种是按间隔进行搜索,例如Columnx> =' 01012010'和Columnx< =' 31122010'另一个是用年份(Columnx)表达式创建一个计算列,索引它,然后对这个新列进行过滤
答案 1 :(得分:25)
如果我明白你想要2010年的所有行,那么:
select *
from mytable
where Columnx >= '2010-01-01 00:00:00'
and Columnx < '2011-01-01 00:00:00'
答案 2 :(得分:6)
T-SQL等;
select * from t where year(Columnx) = 2010
答案 3 :(得分:1)
它很简单
select * from myTable where year(columnX) = 2010
答案 4 :(得分:0)
注意:如果您希望年份基于某个参考日期,下面的代码会计算between
声明的日期:
declare @referenceTime datetime = getutcdate()
select *
from myTable
where SomeDate
between dateadd(year, year(@referenceTime) - 1900, '01-01-1900') --1st Jan this year (midnight)
and dateadd(millisecond, -3, dateadd(year, year(@referenceTime) - 1900, '01-01-1901')) --31st Dec end of this year (just before midnight of the new year)
同样,如果您使用的是年份值,则将year(@referenceDate)
换成参考年份的值将会有效
declare @referenceYear int = 2010
select *
from myTable
where SomeDate
between dateadd(year,@referenceYear - 1900, '01-01-1900') --1st Jan this year (midnight)
and dateadd(millisecond, -3, dateadd(year,@referenceYear - 1900, '01-01-1901')) --31st Dec end of this year (just before midnight of the new year)