サブスクリプション テーブル (start_date
とend_date
) に 2 つの日付があります。指定した月にユーザーが購読しているかどうかを知りたいですか? 例: start_date=11/20/2011 and end_date=03/10/2012
. の月に購読しているすべてのユーザーを知りたいですFeb-2012 (02/2012)
。
ありがとうございました。
サブスクリプション テーブル (start_date
とend_date
) に 2 つの日付があります。指定した月にユーザーが購読しているかどうかを知りたいですか? 例: start_date=11/20/2011 and end_date=03/10/2012
. の月に購読しているすべてのユーザーを知りたいですFeb-2012 (02/2012)
。
ありがとうございました。
他の答えは「とても」複雑なので、私が理解しているかどうかはわかりませんが、sbdyが1か月以内にサブスクライブされているかどうかを知る必要がある限り、これは簡単な方法で行います。
SELECT
*
FROM
your_table
WHERE
CONVERT(datetime,'2012-02-01')
between DATEADD(month, DATEDIFF(month, 0, start_date), 0)
and DATEADD(month, DATEDIFF(month, 0, end_date), 0)
CONVERT関数内に月の最初の日を入れることを忘れないでください。
対象の月として 201202 を文字列として渡すとします。
Declare @StartOfMonth DateTime
Declare @EndOfMonth DateTime
Set @StartOfMonth = Convert(DateTime,@MyMonth + '01')
Set @EndOfMonth = DateSubtract(day, 1,DateAdd(month, 1, @StartOfMonth))
それは、月全体または月の一部のサブスクリプションに興味があるかどうかによって異なります.
これにより、月全体のものが得られます
Select * From Subscriptions Where
StartDate <= @StartOfMonth and EndDate >= @EndOfMonth
または、これにより、その月の任意の部分のものが取得されます
Select * From Subsciptions Where
(@StartOfMonth Between StartDate and EndDate)
Or
(@EndOfMonth Between StartDate and EndDate)
ま、そんなことはどうでもいい。
このようなもの?
DECLARE @subscriptionStart datetime;
DECLARE @subscriptionEnd datetime;
DECLARE @monthStart datetime;
DECLARE @monthEnd datetime;
SET @subscriptionStart = '20111120';
SET @subscriptionEnd = '20120310';
SET @monthStart = '20120201';
SET @monthEnd = (dateadd(day,-1* day(dateadd(month,1,@monthStart)),dateadd(month,1,@monthStart)));
SELECT CASE
WHEN @subscriptionStart <= @monthStart
AND @subscriptionEnd >= @monthEnd
THEN 'month between dates'
ELSE 'month not between dates' END AS result
これを試して
SET @SpecifiedDate = '2012/02/01'
SELECT * FROM myTable WHERE Start_Date >= @SpecifiedDate
また
WHERE Month(@SpecifiedDate) = MONTH(Start_Date) AND YEAR(@SpecifiedDate) = YEAR(Start_Date)
これを使用できます
WHERE Month(@SpecifiedDate) >= MONTH(Start_Date) AND Month(@SpecifiedDate) <= MONTH(End_Date)
しかし、私は完全な日付 (年、月、01 を日として) を使用することを好みます。したがって、SQL がフィルタリングを処理するので、年は気にしません。
WHERE @SpecifiedDate >= Start_Date AND @SpecifiedDate <= End_Date