작년에 대한 데이터 만 가져와야하는 쿼리를 작성하고 있습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
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)))
어느:
- 현재 날짜 시간 가져 오기 GETDATE () = # 8 / 27 / 2008 10:23 am#
- 101 CONVERT (varchar, # 8 / 27 / 2008 10:23 am#, 101) = ‘8/27/2007’ 형식의 문자열로 변환합니다.
- 날짜 시간으로 변환 CONVERT (datetime, ‘8/27/2007’) = # 8 / 27 / 2008 12:00 AM#
- 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 쿼리에 문자열로 삽입하는 것이 좋습니다.
적어도 큰 테이블 (즉, 조인과 결합 될 수있는 수백만 행)의 경우 최적화 프로그램이 훨씬 더 잘 작동 할 수 있으므로 상당한 속도 향상을 얻을 수 있습니다.