我的订阅表中有两个日期(start_date
和end_date
)。我想知道用户是否在指定月份订阅了?例如:start_date=11/20/2011 and end_date=03/10/2012
。我想知道Feb-2012 (02/2012)
月份订阅的所有用户。
谢谢。
答案 0 :(得分:2)
鉴于您将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)
无论如何都是这样的。
答案 1 :(得分:2)
这样的东西?
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
答案 2 :(得分:2)
不确定我是否理解,因为其他答案“如此”复杂,但只要您只需知道sbdy是否在一个月内订阅,我就会以简单的方式执行此操作:
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函数中。
答案 3 :(得分:0)
试试这个
SET @SpecifiedDate = '2012/02/01'
SELECT * FROM myTable WHERE Start_Date >= @SpecifiedDate
OR
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