我有一个表,其中包含具有UserId,生效日期(数据类型日期)和&的资源的比率。结束日期(数据类型日期)
RateId UserId Rate EffectiveDate EndDate
============================================================================
21 169 82 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
23 78 58 2015-07-01 00:00:00.000 2015-07-14 00:00:00.000
24 88 68 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
25 114 78 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
26 218 56 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
27 78 89 2015-07-15 00:00:00.000 2025-12-30 00:00:00.000
28 174 69 2015-01-01 00:00:00.000 2015-08-14 00:00:00.000
29 174 59 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
30 235 65 2015-01-01 00:00:00.000 2015-08-14 00:00:00.000
31 235 84 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
32 234 49 2015-08-01 00:00:00.000 2015-08-14 00:00:00.000
33 234 59 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
34 303 89 2014-10-01 00:00:00.000 2015-08-14 00:00:00.000
35 303 75 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
36 481 84 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
我需要为那些费率仅在当前月份范围内(在开始日期和月末日期之间)的用户选择费率。
这就是我现在所做的。
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @STARTDATEOFMONTH DATE
DECLARE @LASTDATEOFMONTH DATE
SET @MONTH = 8 /*Current Month*/
SET @YEAR = 2015 /*Current Year*/
SET @STARTDATEOFMONTH = DATEADD(MONTH,@MONTH-1,DATEADD(YEAR,@YEAR-1900,0)) /*FIRST*/
SET @LASTDATEOFMONTH = DATEADD(DAY,-1,DATEADD(MONTH,@MONTH,DATEADD(YEAR,@YEAR-1900,0))) /*LAST*/
SELECT * FROM TRNS_RATE_DETAILS
WHERE @STARTDATEOFMONTH >= EFFECTIVEDATE
AND @LASTDATEOFMONTH <= ENDDATE
我正在计算每个月的开始日期和结束日期(比如上面的查询我已经过了当月= 8&amp; year = 2015)
查询输出
RateId UserId Rate EffectiveDate EndDate
============================================================================
21 169 82 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
24 88 68 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
25 114 78 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
26 218 56 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
27 78 89 2015-07-15 00:00:00.000 2025-12-30 00:00:00.000
36 481 84 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
正如您所见,我只能获得当前月份开始日期之前的记录。在当月的最后一个日期之后。
我需要获得那些生效日期和时间的记录。结束日期介于开始日期和结束日期之间。每个月的结束日期。
说,我在2015年1月1日(生效日期)到8月14日(结束日期)之间的日期资源(UserId)的比率= 45,而2015年8月15日(生效日期)之间的另一个比率= 75 )到2025年12月30日(结束日期)
所以我实际上想要2015年8月的同一资源的两种费率(45&amp; 75)?
请帮帮我!
谢谢!
答案 0 :(得分:1)
如果您只想使用当月,可以使用DATEPART
和GETDATE
:
SELECT * FROM TRNS_RATE_DETAILS
WHERE
(
(DATEPART(month,EFFECTIVEDATE) <= DATEPART(month,GETDATE())
AND DATEPART(year,EFFECTIVEDATE) = DATEPART(year,GETDATE()))
OR
DATEPART(year,EFFECTIVEDATE) < DATEPART(year,GETDATE())
)
AND
(
(DATEPART(month,ENDDATE) >= DATEPART(month,GETDATE())
AND DATEPART(year,ENDDATE) = DATEPART(year,GETDATE()))
OR
DATEPART(year,ENDDATE) > DATEPART(year,GETDATE())
)
答案 1 :(得分:0)
你想在startdate和lastdate之间使用EFFECTIVEDATE ......但实际上你要求数据库记录的startdate大于生效日期....这与你想要的相反。
尝试:
{{1}}
顺便说一下,您是否只是使用提取功能检查月份?
答案 2 :(得分:0)
也许这会对你有所帮助:
SELECT *
FROM TRNS_RATE_DETAILS
WHERE (MONTH(EFFECTIVEDATE) = @MONTH AND YEAR(EFFECTIVEDATE) = @YEAR)
OR (MONTH(ENDDATE) = @MONTH AND YEAR(ENDDATE) = @YEAR)