을 검색하는 방법을 삽입되는 모든 행하는 동안 주어진 달 T-Sql 을 사용하는
-
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
제휴하지 않습니다 StackOverflow