У меня есть данные, которые я пытаюсь извлечь для отчета, и я работаю над отчетом с начала года. Мои столбцы в таблице отформатированы как 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');
Есть ли простой способ добиться этого?
2 ответа
Да, это действительно очень просто:
WHERE YEAR(A.[reimbursementDate]) = YEAR(GETDATE())
Это должен быть лучший способ, если производительность является проблемой (хотя это не так читаемо)
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
не содержится в функции, запрос сможет использовать любые применимые индексы.
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
Year(GetDate())
получить текущий год