Как обрабатывать високосный год в SQL-запросах - PullRequest
0 голосов
/ 29 февраля 2012

Мой пример запроса:

declare @todaysdate datetime = getdate()


select * from foo f
WHERE f.completedt < (CAST(MONTH(@todaysdate) AS VARCHAR) + '/' + CAST(DAY(@todaysdate) AS VARCHAR) + '/' + CAST(f.yr - 1 AS VARCHAR))

, если вы видите, что я использую (yr - 1) в предложении where, и это выдает ошибку date out of range для 2011, 2010, есть хороший способ проверить скачокгод в запросе и использовать правильную дату?

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

попробуйте заменить год - 1 на:

DATEADD(year,-1,yr )
2 голосов
/ 29 февраля 2012

На основе ваших комментариев относительно другого ответа, как насчет чего-то такого:

DECLARE @testyear INT
SET @testyear = 2011

SELECT DATEADD(year, @testyear-DATEPART(YEAR, GETDATE()), GETDATE())

Мы определяем, сколько мы хотим добавить или вычесть из года, указанного на входе.

Так что в вашем случае я думаю, что это будет:

select * from foo f inner join @yrtable y on f.yr = y.year
WHERE f.completedt < DATEADD(year, @testyear-DATEPART(YEAR, @todaysdate), @todaysdate)

(при условии, что я правильно вычитал свои вычитания). :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...