Параметр SQL Year Plus ничего не возвращает - PullRequest
0 голосов
/ 04 апреля 2011

Я передаю две переменные из строки запроса (которую я проверил, что они отправляют правильные значения, скажем,? Mon = 4 & year = 11). Когда я пытаюсь выполнить этот запрос, он не возвращает результатов.

@month varchar,
@year varchar

AS
Select *
From evn
Where (Month(EventDate) = Month(@month + '/1/11') AND Year(EventDate) = Year('1/1/' + @year))
Order By EventDate ASC

Но если я поменяю свое Где на

Where (Month(EventDate) = Month(@month + '/1/11') AND Year(EventDate) = Year('1/1/11'))

Работает просто отлично, поэтому я предполагаю, что мой синтаксис неверен. Как я уже сказал, я проверил, чтобы убедиться, что строка запроса возвращает правильные значения, но все еще ничего. Любая помощь в этом? Я использую SQL Server 2005, спасибо

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Почему вы помещаете значения года и месяца в строки только для того, чтобы снова получить то же значение?Просто отправьте параметры в виде целых чисел и сразу же используйте их:

@month int,
@year int

as

Select *
From evn
Where Month(EventDate) = @month AND Year(EventDate) = @year
Order By EventDate ASC
0 голосов
/ 04 апреля 2011

Ваш предложенный метод не будет очень дружественным к индексу, возможно, использовать альтернативный подход?

Следующий SQL эффективно преобразует дату в начало месяца ...
DATEADD(month, DATEDIFF(month, 0, <a date>), 0)

С этим вы могли бы пройти месяц, который вас интересует, и для вашего запроса как ...

SELECT
  *
FROM
  evn
WHERE
    EventDate >= DATEADD(month, DATEDIFF(month, 0, @myDate),     0)
AND EventDate <  DATEADD(month, DATEDIFF(month, 0, @myDate) + 1, 0)

Это позволяет избежать неявного преобразования между строкой и датами. Более того, он гарантирует, что математические манипуляции не выполняются в поле поиска (EventDate), а выполняются только один раз для входного параметра. Отсутствие манипулирования полем EventDate позволяет очень эффективно использовать любые соответствующие индексы.

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