Как мне указать годовой отчет для календарного отчета? - PullRequest
0 голосов
/ 09 февраля 2009

Вот запрос, который я использую:

SELECT * FROM ra_ProjectCalendar 
WHERE MonthNumber between @Month and @Month + 12 and FullYear = @Year

Отлично работает в этом году, но останавливается в декабре этого года. Как мне заставить его показывать текущий год?

Ответы [ 5 ]

2 голосов
/ 09 февраля 2009

как хранится ваша дата?

из вашего sql, я думаю, у вас есть одно поле на месяц, одно на год и одно на день. Я бы рекомендовал вместо этого использовать одно поле даты и времени, а затем вы можете использовать метод DateAdd () , чтобы добавить 12 месяцев (или любой другой интервал).

РЕДАКТИРОВАТЬ: мне было отмечено в комментарии, что одна вещь, которую вы получаете от этого, это производительность - которая более или менее важна в зависимости от масштаба вашего приложения, но всегда приятно осознавать. если вы выполните этот запрос в хранимой процедуре, вот что вы будете делать:

DECLARE @oneYearAhead datetime;
SET @oneYearAhead = DateAdd(m, 12, @PassedDate)

SELECT * FROM ra_ProjectCalendar
 WHERE @PassedDate <= [Date] AND [Date] <= @oneYearAhead; 

с указанным выше кодом, вы получите все записи между датой, которую вы проходите, и на год вперед. (Я не уверен на 100% в синтаксисе для объявления и установки переменной @oneYearAhead, но вы поняли ...). Обратите внимание, что [], который я использую вокруг имени столбца Дата, позволяет мне использовать зарезервированные слова в именах столбцов - я сделал это привычкой, вместо того, чтобы запоминать, какие слова зарезервированы ...

1 голос
/ 09 февраля 2009

Попробуйте это:

SELECT * FROM ra_ProjectCalendar 
WHERE 
  (MonthNumber > @Month AND FullYear = @Year)
  OR (MonthNumber < @Month AND FullYear = @Year + 1)
0 голосов
/ 09 февраля 2009

В зависимости от того, как хранится ваша информация (это немного сложно определить по вашему запросу), либо DATEADD, либо DATEDIFF, вероятно, сделают вас правильно. Есть список доступных функций даты на MSDN.

0 голосов
/ 09 февраля 2009

Фактически введите и сохраните дату, а не месяц и год, и сравните с текущей датой, используя DateDiff:

WHERE DATEDIFF(m, @PassedDate, StoredDateColumn) < 12

Обратите внимание, что я использовал 12 месяцев, а не 1 год, потому что DATEDIFF считает количество пересеченных границ. Таким образом, в декабре использование datediff с указанием даты и года вернет один после одного месяца. Вы действительно хотите 12 месяцев.

0 голосов
/ 09 февраля 2009

Что-то вроде этого может работать лучше, но неясно, каково ваше намерение:

select * 
 from ra_ProjectCalendar 
 where DATEDIFF ( month , @startdate , @enddate ) <=12

Редактировать: это синтаксис сервера SQl

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