3

Microsoft SQL 2008 を使用しています。現在の日付からその月の最初の日 (または同じ月内) までを選択する 2 つのテーブルがあります。今日の日付が 2012 年 5 月 9 日で、日付列が「datecolumn」であるとします。以下のテーブルから、テーブル 1 からは行セット 6、7、テーブル 2 からは行セット 9、2 のみを取得する必要があります。これらの日付は 2012 年 5 月 9 日と同じ月内にあるためです。

table1
4 02/01/2012
5 01/02/2011
6 05/01/2012
7 05/20/2012

table2
8 02/01/2012
9 05/14/2012
3 01/02/2011
2 05/18/2012

私はこれを試しましたが、うまくいきませんでした:

DECLARE @daterange
SET @daterange = (DATEPART(MONTH,GETDATE()) + '/' + DATEPART(YEAR,GETDATE()))

SELECT blah from table where (DATEPART(MONTH,datecolumn) + '/' + DATEPART(YEAR,datecolumn)) = @daterange
4

3 に答える 3

1

あなたはそれを単純化することができます、から日付フィールドを再構成する必要はありませんGETDATE()

SELECT blah
FROM table
WHERE DATEPART(MONTH,datecolumn) = DATEPART(MONTH,getdate()) AND
DATEPART(YEAR,datecolumn) = DATEPART(YEAR,getdate())
于 2012-05-10T00:36:18.033 に答える
0

次のように、当月の最初の日付を受け取ることができます。

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)

上記の結果に 1 か月を追加すると、翌月の最初の結果が得られます。

DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)

これら 2 つの日付を使用して、次のように必要な行を取得できます。

SELECT
  …
FROM table1
WHERE date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())    , 0)
  AND date <  DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)
于 2012-05-10T00:43:33.990 に答える
0

今月の初めと終わりを特定し、それらの間のレコードを選択するのはどうですか:

declare @monthBeginning datetime 
set @monthBeginning = (select dateadd(dd,-(day(dateadd(mm,1,getdate()))-1),dateadd(mm,0,getdate()))

declare @monthEnd datetime
set @monthEnd = (select dateadd(dd, -day(dateadd(m,1,getdate())), dateadd(m,1,getdate())))

select *
from dateTable
where datecolumn between @monthBeginning and @monthEnd

月の始まりと終わりの計算を頻繁に使用している場合は、それらをスカラー関数に入れることをお勧めします。ロジックは複雑なので、繰り返したくありません。

于 2012-05-10T00:41:37.447 に答える