SQL判断一个日期所处时间段,该怎么解决
SQL判断一个日期所处时间段
需要判断一个日期所处的时间段,21号到20号为条件。如2015-4-25,那么它的所处时间段应该是2015-4-21到2015-5-20之间,然后我再截取2015-5-20的月份,我是这样写的,取时间区间然后再截取这个时间结束的月份

但问题是好像超过了20号的纪录,它的时间段的月份应该是要往上加一个月的,就像2015-4-25,它的所处时间段应该是2015-4-21到2015-5-20之间。那这样写就应该有问题了,请大神们帮忙看看要怎么修改
------解决思路----------------------
引用:
"如2015-4-25,那么它的所处时间段应该是2015-4-21到2015-5-20之间,然后我再截取2015-5-20的月份"
问下,如果输入是2015-4-25,那么按照规则处理之后应该是2015-5-25还是2015-5-20?
------解决思路----------------------
需要判断一个日期所处的时间段,21号到20号为条件。如2015-4-25,那么它的所处时间段应该是2015-4-21到2015-5-20之间,然后我再截取2015-5-20的月份,我是这样写的,取时间区间然后再截取这个时间结束的月份
SELECT
CONVERT(varchar(8),DATEADD(mm,-1,a.createdatetime),120)+'21' as monthtime,
CONVERT(varchar(8),a.createdatetime,120)+'20' as monthend,
CONVERT(int,month(CONVERT(varchar(8),a.createdatetime,120)+'20')) as curmonth,
..............................
但问题是好像超过了20号的纪录,它的时间段的月份应该是要往上加一个月的,就像2015-4-25,它的所处时间段应该是2015-4-21到2015-5-20之间。那这样写就应该有问题了,请大神们帮忙看看要怎么修改
------解决思路----------------------
引用:
"如2015-4-25,那么它的所处时间段应该是2015-4-21到2015-5-20之间,然后我再截取2015-5-20的月份"
问下,如果输入是2015-4-25,那么按照规则处理之后应该是2015-5-25还是2015-5-20?
------解决思路----------------------
SELECT createdatetime
,CONVERT(VARCHAR(7),DATEADD(MONTH,-1,DATEADD(DAY,-20,DATEADD(MONTH,1,createdatetime))),120)+'-21' AS monthtime
,CONVERT(VARCHAR(7),DATEADD(DAY,-20,DATEADD(MONTH,1,createdatetime)),120)+'-20' AS monthend
,MONTH(DATEADD(DAY,-20,DATEADD(MONTH,1,createdatetime))) AS curmonth
FROM(--模拟数据
SELECT'2015-04-20' createdatetime
UNION ALL SELECT'2015-04-21'
UNION ALL SELECT'2015-05-21'
UNION ALL SELECT'2015-05-20'
) TB