У меня есть данные, которые я пытаюсь извлечь для отчета, и я работаю над отчетом с начала года. Мои столбцы в таблице отформатированы как datetime. Я пытаюсь запустить оператор выбора, чтобы получить все результаты, где дата = этот год.

Например:

SELECT  A.[id], A.[classXML]
FROM   tuitionSubmissions as A
WHERE A.[status] = 'Approved' AND A.[reimbursementDate] = THISYEAR
FOR    XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root');

Есть ли простой способ добиться этого?

36
SBB 31 Май 2014 в 01:20
1
Year(GetDate()) получить текущий год
 – 
Serpiton
31 Май 2014 в 01:23

2 ответа

Лучший ответ

Да, это действительно очень просто:

WHERE YEAR(A.[reimbursementDate]) = YEAR(GETDATE())
67
Justin Helgerson 31 Май 2014 в 01:22
2
Однако простой способ - не самый эффективный. Это нелепо.
 – 
Martin Smith
31 Май 2014 в 01:27
1
- Абсолютно верно, но я не смотрю на его экземпляр SQL Server, чтобы узнать, имеет ли это значение. Возможно, у него всего 30 000 записей, и это не имеет значения, потому что объем данных очень мал. Хотя стоит отметить справедливый момент!
 – 
Justin Helgerson
31 Май 2014 в 01:30

Это должен быть лучший способ, если производительность является проблемой (хотя это не так читаемо)

where A.[reimbursementDate] between  
     DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) and
     DATEADD(MILLISECOND, -3, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0))

Эти забавные операторы DATEADD возвращают первый и последний дни текущего года (до 31 декабря 23: 59: 59.997). Поскольку reimbursementDate не содержится в функции, запрос сможет использовать любые применимые индексы.

6
Jerrad 31 Май 2014 в 02:18