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