0

我的订阅表中有两个日期(start_dateend_date)。我想知道用户是否在指定月份订阅?例如:start_date=11/20/2011 and end_date=03/10/2012. 我想知道 . 月份订阅的所有用户Feb-2012 (02/2012)

谢谢你。

4

4 回答 4

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)

好吧,反正就是这样。

于 2012-09-16T14:25:22.800 回答
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
于 2012-09-16T14:27:24.840 回答
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 函数中。

于 2012-09-16T14:58:00.373 回答
0

试试这个

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
于 2012-09-16T14:22:33.063 回答