답변:
다음은 현재 날짜에 -1 년을 추가합니다.
SELECT ... From ... WHERE date > DATEADD(year,-1,GETDATE())
전년도의 결과를 선택하는 데 도움이되는 솔루션을 찾는 동안이 페이지를 찾았습니다. 위에 표시된 대부분의 결과는 지난 365 일의 항목을 반환하는 것 같습니다.
동시에 다음 코드에서 내 요구 사항을 해결할 수있는 충분한 방향을 제공했습니다.이 코드는 나와 동일한 요구 사항을 갖고 있고 해결책을 찾기 위해이 페이지를 방문 할 수있는 다른 사람들을 위해 여기에 게시하고 있습니다.
SELECT .... FROM .... WHERE year(*your date column*) = year(DATEADD(year,-1,getdate()))
위의 솔루션이 내가 필요한 것을 얻는 데 도움이 된 이들에게 감사합니다.
음, 여기에 뭔가 빠진 것 같아요. 사용자가 지난 365 일이 아닌 작년의 데이터를 가져 오려고합니다. 큰 차이가 있습니다. 제 생각에는 작년의 데이터는 2007 년의 모든 데이터입니다 (지금 2008 년이라면). 따라서 정답은 다음과 같습니다.
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1
그런 다음이 쿼리를 제한하려면 다른 필터를 추가 할 수 있지만 항상 작년에 검색합니다.
SELECT ... FROM ... WHERE YEAR(DATE) = YEAR(GETDATE()) - 1 AND DATE > '05/05/2007'
가장 읽기 쉬운 IMO :
SELECT * FROM TABLE WHERE Date >
DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))
어느:
DATEDIFF 및 DATEADD를 사용하여 오늘 자정을 얻을 수있는 변형이 있지만 다소 둔화되는 경향이 있습니다 (성능이 약간 더 좋지만 데이터를 가져 오는 데 필요한 읽기에 비해 눈치 채지 못함).
GETDATE ()는 현재 날짜 와 시간을 반환합니다 .
경우 지난해 (원래의 예처럼) 현재 날짜 작년 자정에 시작 당신은 같은 것을 사용한다 :
DECLARE @start datetime
SET @start = dbo.getdatewithouttime(DATEADD(year, -1, GETDATE())) -- cut time (hours, minutes, ect.) -- getdatewithouttime() function doesn't exist in MS SQL -- you have to write one
SELECT column1, column2, ..., columnN FROM table WHERE date >= @start
다른 제안은 "SQL 전용"이있는 경우 유용합니다.
그러나 가능한 경우 프로그램에서 날짜를 계산하고 SQL 쿼리에 문자열로 삽입하는 것이 좋습니다.
적어도 큰 테이블 (즉, 조인과 결합 될 수있는 수백만 행)의 경우 최적화 프로그램이 훨씬 더 잘 작동 할 수 있으므로 상당한 속도 향상을 얻을 수 있습니다.
declare @iMonth int
declare @sYear varchar(4)
declare @sMonth varchar(2)
set @iMonth = 0
while @iMonth > -12
begin
set @sYear = year(DATEADD(month,@iMonth,GETDATE()))
set @sMonth = right('0'+cast(month(DATEADD(month,@iMonth,GETDATE())) as varchar(2)),2)
select @sYear + @sMonth
set @iMonth = @iMonth - 1
end
나는 @DE White처럼 원래 질문과 비슷하지만 다른 이유로 여기에 왔습니다. 원래 질문은 지난 365 일 동안 묻습니다. @samjudson의 대답은 그것을 제공합니다. @DE White의 답변은 전년도에 대한 결과를 반환합니다.
내 쿼리는 현재 날짜를 포함하여 전년도에 대해 작동한다는 점에서 약간 다릅니다 .
SELECT .... FROM .... WHERE year(date) > year(DATEADD(year, -2, GETDATE()))
예를 들어 2017 년 2 월 17 일에이 쿼리는 2016 년 1 월 1 일부터 2017 년 2 월 17 일까지의 결과를 반환합니다.