istudent Ответов: 2

Как получить записи с февраля этого месяца по январь следующего в SQL server


I need to write Sql Query that returns records from begining of current year's Feb month 
to end of next year's Jan month.

I only know how to get begining of current year and end of following year. 

My query is 
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) 
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 2, -1) 


Что я уже пробовал:

SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) 
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 2, -1)

2 Ответов

Рейтинг:
2

OriginalGriff

Попробуй:

SELECT ... WHERE MyDateColumn BETWEEN startDate AND endDate


istudent

дата начала должна быть в феврале текущего года, а конец-в январе следующего года. Это должно быть определено во время выполнения. Мне нужно написать запрос в моей программе, который будет фильтровать данные в зависимости от столбца даты

OriginalGriff

Да... вы передаете начальную и конечную даты в качестве параметров запроса ...

Рейтинг:
1

Wendelius

Вы имеете в виду, что вам нужно создавать записи между заданными датами? Если это так, то вы можете использовать рекурсивный CTE, см. С common_table_expression (Transact-SQL) | Microsoft Docs[^]

Например что-то вроде

WITH Dates (DateColumn)  AS (
	SELECT CONVERT(date, '02/01/2018')  AS DateColumn
	UNION ALL
	SELECT DATEADD(day, 1, d.DateColumn) AS DateColumn
	FROM Dates d
	WHERE d.DateColumn < CONVERT(date, '06/01/2018')
)
SELECT d.* 
FROM Dates d
OPTION (MAXRECURSION 120)


istudent

Мне нужно написать sql-оператор в моем коде c#, который должен фильтровать данные на основе столбца даты и критериев от текущего года февраля до следующего года января.

Wendelius

В этом случае решение 1-это то, что вам нужно. Вы уже создали вызовы функций для вычисления предельных дат, поэтому поместите их в запрос, предоставленный OriginalGriff.