Это, вероятно, простой оператор where, но я хочу сказать, что из столбцаX (который является datetime) мне нужны все строки, где только год = 2010.
так:
select * from mytable where Columnx =
Это, вероятно, простой оператор where, но я хочу сказать, что из столбцаX (который является datetime) мне нужны все строки, где только год = 2010.
так:
select * from mytable where Columnx =
select * from mytable where year(Columnx) = 2010
Что касается использования индекса (ответ на комментарий Саймона):
если у вас есть указатель на Columnx, SQLServer НЕ будет использовать его, если вы используете функцию "год" (или любую другую функцию).
Существует два возможных решения: один выполняет поиск по интервалу, например Columnx >= '01012010' и Columnx <= '31122010', а другой - для создания расчетного столбца с выражением year (Columnx), index его, а затем сделать фильтр в этом новом столбце
Если я понимаю, что вам нужны все строки в 2010 году, то:
select *
from mytable
where Columnx >= '2010-01-01 00:00:00'
and Columnx < '2011-01-01 00:00:00'
T-SQL и другие;
select * from t where year(Columnx) = 2010
простое
select * from myTable where year(columnX) = 2010
Примечание. Если вы хотите, чтобы год основывался на какой-либо ссылочной дате, приведенный ниже код вычисляет даты для оператора 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)