SQL select * from year where year = 2010

时间:2012-03-27 13:57:08

标签: sql

这可能是一个简单的where子句,但我想说,从columnX(这是datetime)我想要所有只有年份= 2010的行。

这样:

select * from mytable where Columnx =

5 个答案:

答案 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)