У меня есть таблица в SQL Server, которая имеет много строк, с столбцом created_date
. Этот столбец имеет ряды, начиная с 2006 года.SQL-запрос, не возвращающий все строки
Я хочу получить все строки, которые были созданы до февраля 2015 года. Эта хранимая процедура имеет параметр @month
. Он должен выбрать все строки на основе введенного значения @month
.
Вот мой запрос:
select *
from products
where 1=1
and year(created_date) <= 2015
and month(created_date) <= @month
Но этот запрос возвращает только те записи, которые были созданы в и до февраля месяца прошлых лет за исключением записей, которые были созданы в других месяцах 2014 года (например, , 2014-03-17, 2014-05-05).
Я должен получить новую дату, основанную на введенном @month. Предположим, что я вступил в месяц в июле, я хочу иметь условие «где created_date < 2015-07-31». Так что я могу сделать что-то вроде этого,
Так что я изменил мой запрос,
declare @date datetime
set @date = CAST((2015 + '-' + @month + '-' + 28) as datetime)
select *
from products
where 1=1
and year(created_date) <= 2015
Но этот запрос возвращает 1905-08-08 00: 00: 00,000 и я хочу, чтобы получить 2015-02-28 00: 00: 00.000, а также я должен найти общее количество дней на основе введенного @month, чтобы я мог передать это число на CAST ((2015 + '-' + @month + '-' +) в качестве datetime) вместо 28.
Просто используйте переменную даты, которая имеет значение для ограничения, которое вы хотите использовать в качестве критериев вместо использования функций year() и month()? Например. created_date <= @limit –