을 검색하는 방법을 삽입되는 모든 행하는 동안 주어진 달 T-Sql 을 사용하는

StackOverflow https://stackoverflow.com/questions/598438

  •  11-09-2019
  •  | 
  •  

문제

내가 노력하고 검색의 모든 행 삽입되는 중합니다.

SELECT 
    dbo.Post.UserId, 
    dbo.Post.Tags, 
    dbo.Post.CommentCount, 
    dbo.Post.Status,  
    dbo.Post.PostDate, 
    dbo.Post.[Content], 
    dbo.Post.Title, 
    dbo.Post.PostId, 
    dbo.[User].DisplayName 
FROM  
    dbo.Post INNER JOIN
    dbo.[User] ON dbo.Post.UserId = dbo.[User].UserId 
Where PostDate >=  DATEADD(mm, 0, DATEDIFF(mm, 0, '01/28/2009')) 
    AND  PostDate <=  DATEADD(mm, 0, DATEDIFF(mm, 0, '01/28/2009')) 

어떤 아이디어가?

도움이 되었습니까?

해결책

 WHERE PostDate >=  DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), 0)
   AND PostDate <  DATEADD(mm, 1 + DATEDIFF(mm, 0, '01/28/2009'), 0)

다른 팁

당신이 언급한"주어진 한 달에"나는 가정 개월 수에서 1 부 12.로 시작하면 날짜 원하는 모든 것을 내에는 달:

@month = datepart(mm, 'given date');
@year  = datepart(yy, 'given date');

Then use:

Where 
   datepart(mm, Post.Postdate) = @month
   and datepart(yy, Post.PostDate) = @year

다음과 같다.

(추가 올해 경우에는 그에 대한 관심.:-))

당신은 그 달의 시작 순간과 다음 달의 시작 순간을 만들고, 시작 순간을 포함하여 날짜를 가져 가서 다음 시작 순간을 포함하지 않을 때까지.

즉, 결과는 다음과 같아야합니다.

Where PostDate >= '01/01/2009' and PostDate < '02/01/2009'

이것은 정확히 그 달을 얻을 수 있고 다음 달과 겹치지 않을 것입니다.

표현식 DATEDIFF(mm, 0, '2009-01-28') 당신에게 몇 개월의 수를 줄 것입니다 01/01/1900, 따라서 해당 날짜를 세 번째 매개 변수로 사용해야합니다. DATEADD:

DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '01/01/1900')

다음 달의 시작 순간을 얻으려면 '02/01/1900' 오프셋으로. 조건에 넣자 :

Where
  PostDate >= DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '01/01/1900') and
  PostDate < DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), '02/01/1900')

이것은 할 것입니다.

Where PostDate >=  DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), 0) 
    AND  PostDate <  DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009') + 1, 0)

또한 보통 쿼리 전에 날짜 범위를 설정하므로 WHERE 절에 날짜 함수를 넣을 필요가 없습니다.

declare @from datetime;
declare @thru datetime;

set @from = DATEADD(mm, DATEDIFF(mm, 0, '01/28/2009'), 0);
set @thru = DATEADD(mm, 1, @from);

...
Where PostDate >=  @from 
        AND  PostDate <  @thru
@dtInput = '01/28/2009'

-- subtract current days (less one) to get to start of month
set @dtStart = dateadd( dd, 1 - datepart( dd, @dtInput ), @dtInput )

-- add a month, then subtract 1 sec to get 23:59:59 on last day of month
set @dtEnd = dateadd( ss, -1, dateadd( mm, 1, @dtStart ))

SELECT ... WHERE PostDate between @dtStart and @dtEnd
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top