2013-05-12 3 views
-3

Привет кажется, что это тривиальный вопрос, но как-то это не так, я получил простой запрос, гдеSql более состояние на ту же строку

where ([Year] >= 2012 and [Month] >= 12) and ([Year] <= 2013 and [Month] < 1) 

и этот запрос исключают любые строки вызывают есть условие месяц> 12 и месяц < 1, так как это сделать, что это вернет строку на 2012.12, чтобы проверить месяц> = 12 только в том случае, если год 2012 года и проверить месяц < 1 только для тех строк, где год - 2013?

Я должен упомянуть, что мой SQL таблица не имеет DATETIME полей только

[Year] [int] NOT NULL, 
[Month] [int] NOT NULL, 
[Value] [float] NOT NULL, 
+0

Что означает «месяц <1»? Если вы рассматриваете январь как «0», тогда как может быть месяц «12»? –

+0

это означает, что для получения только строк за предыдущий год он блокирует строки из следующих лет – kosnkov

+0

Вы только пытаетесь получить строки с декабря 2012 года? Если вам так просто, вам нужно [Год] = 2012 и [Месяц] = 12' Если нет, объясните, какие именно из 2013 вам нужны. –

ответ

-2

По вашему requiremnet вам нужно проверить состояние с or состоянии, как показано ниже -

также одна вещь [месяц], что месяц будет составлять от 1 до 12. он никогда не будет меньше 1, а также никогда не будет больше 12. поэтому для достижения желаемого результата вы можете использовать ниже запроса -

where ([Year] >= 2012 and [Month] = 12) or ([Year] < 2013 and [Month] < 2) 

Надеюсь, что это решит вашу проблему.

Для получения вывода, как вы прокомментировали мы можем сцепить год и месяц часть и может проверить, как показано ниже -

where ([Year]*100+[Month] >= 201212 and [Year]*100+[month] < 201302) 

это условие будет давать только запись на 2012 год и 12-й месяц или год 2013 и месяц меньше, чем 2

+0

ОК я улучшаю запрос, он должен быть где ([Год]> = 2012 и [Месяц] = 12) или ([Год] <= 2013 и [Месяц] <2), но это вернет 2012.01 2012.12 и 2013.01, а только два последних должны быть возвращены – kosnkov

+0

Я пропустил ситуацию, как вы прокомментировали, прежде чем писать запрос .. поэтому я отредактировал свое сообщение .. пожалуйста, проверьте обновленный. –

+0

Почему я проголосовал за этот ответ? Просьба предоставить ваши ценные отзывы также вместе с вашими голосами (положительными или отрицательными). –

0

there fore i want like two condition to check, if year 2012 and month >= 12 and if year 2013 and month <2 should return two rows 2012.12 and 2013.1

@kosnkov: Я делаю предположение, что здесь вы спрашиваете, как найти строки, где дата в течение определенного числа месяцев от даты начала. Вы знакомы с функцией DateDiff()? Для этого требуется столбец DateTime.

http://msdn.microsoft.com/en-us/library/ms189794%28v=sql.90%29.aspx

Смежные вопросы