Каков наилучший способ выполнить математику в зачетную дату в SQL Server? - PullRequest
0 голосов
/ 25 марта 2009

Это связано с Пол даты в SQL-сервере , но я делаю еще один шаг вперед:

Я пишу запрос к таблице SQL Server и хочу получить все записи за текущий календарный год и предыдущий календарный год. Итак, прямо сейчас, я бы хотел, чтобы запрос возвращал все записи в период с 1 января 2008 года и по сегодняшний день. Но 1 января 2010 года я хочу, чтобы он возвращал записи не старше 2009 года.

По сути, я хочу указать текущую дату в начале года, а затем вычесть 1.

Покопавшись в какой-то документации по SQL Server, я пришел к следующему:

   WHERE create_date >= CAST((CAST(YEAR(GETDATE()) AS int) -1) AS varchar)

но это немного уродливо. Есть ли лучший способ?

Ответы [ 2 ]

4 голосов
/ 25 марта 2009

Почему бы просто не использовать функцию year и create_date?

WHERE YEAR(create_date) >= (YEAR(GETDATE()) -1)

Это предполагает (как и вы), что в базе данных нет записей, превышающих сегодняшнюю дату

0 голосов
/ 25 марта 2009

Я бы предложил назначить переменную с датой lastyear-01-01, либо сделав для нее UDF, либо что-то вроде

DECLARE @startOfLastYear DATETIME
SET @startOfLastYear = CAST(YEAR(GETDATE()) - 1 AS VARCHAR) + '-01-01'   

Затем выполните запрос:

WHERE  create_date >= @startOfLastYear

По двум причинам:

  1. Использование YEAR () или любой другой функции по данным из таблиц (т.е. YEAR (create_date)) создает индексы непригодный и уменьшает выполнение запроса
  2. Имя переменной точно говорит, что это такое, и читать код проще.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...