[sql] SQL Server : 지난 1 년 동안 만 데이터 가져 오기

작년에 대한 데이터 만 가져와야하는 쿼리를 작성하고 있습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?

SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'



답변

다음은 현재 날짜에 -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'


답변

BOL에서 dateadd 조회

dateadd(yy,-1,getdate())


답변

가장 읽기 쉬운 IMO :

SELECT * FROM TABLE WHERE Date >
   DATEADD(yy, -1, CONVERT(datetime, CONVERT(varchar, GETDATE(), 101)))

어느:

  1. 현재 날짜 시간 가져 오기 GETDATE () = # 8 / 27 / 2008 10:23 am#
  2. 101 CONVERT (varchar, # 8 / 27 / 2008 10:23 am#, 101) = ‘8/27/2007’ 형식의 문자열로 변환합니다.
  3. 날짜 시간으로 변환 CONVERT (datetime, ‘8/27/2007’) = # 8 / 27 / 2008 12:00 AM#
  4. 1 년 빼기 DATEADD (yy, -1, # 8 / 27 / 2008 12:00 AM#) = # 8 / 27 / 2007 12:00 AM#

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 쿼리에 문자열로 삽입하는 것이 좋습니다.

적어도 큰 테이블 (즉, 조인과 결합 될 수있는 수백만 행)의 경우 최적화 프로그램이 훨씬 더 잘 작동 할 수 있으므로 상당한 속도 향상을 얻을 수 있습니다.