SQL select*from year where year = 2010

30 sql

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

所以:

select * from mytable where Columnx =
Run Code Online (Sandbox Code Playgroud)

Die*_*ego 41

select * from mytable where year(Columnx) = 2010
Run Code Online (Sandbox Code Playgroud)

关于索引使用(回答Simon的评论):

如果你有一个关于Columnx的索引,如果你使用函数"year"(或任何其他函数),SQLServer将不会使用它.

有两种可能的解决方案,一种是按间隔进行搜索,如Columnx> ='01012010'和Columnx <='31122010',另一种是创建一个带有年份(Columnx)表达式的计算列,索引它,以及然后对这个新列进行过滤

  • 如果性能达不到要求,我认为此方法不会使用“Columnx”列上的任何索引 (2认同)

Sim*_*mon 25

如果我明白你想要在2010年的所有行,那么:

select * 
  from mytable 
 where Columnx >= '2010-01-01 00:00:00' 
       and Columnx < '2011-01-01 00:00:00'
Run Code Online (Sandbox Code Playgroud)

  • 是,+1允许使用索引.您还可以将条件简化为:`其中Columnx> ='2010-01-01'和Columnx <'2011-01-01'`(效​​率没有任何差别,只需少量字符代码:) (3认同)
  • +1 - OP想要的是什么***和***使用索引进行范围搜索,这可能比目前为止的其他答案快几个数量级. (2认同)

Ale*_* K. 6

T-SQL等;

select * from t where year(Columnx) = 2010
Run Code Online (Sandbox Code Playgroud)

  • 在函数中包装列使其不可搜索.这导致完整扫描.我不会这样做的.过滤日期的做法非常糟糕.我强烈推荐OP看看@simon的答案. (4认同)