2014-03-04 35 views
0

我的要求是将@STARTDATE变量设置为01 [开始日期] - 月[当前月份] - 年份[当前年份]并基于月份2月28天@ENDDATE变化,扬31天我需要将开始日期和结束日期设置为存储过程中的变量

 DECLARE @STARTDATE DATETIME 
DECLARE @ENDDATE DATETIME 

基于月份我们把结束日期

 DECLARE @MONTH int 
    SET @MONTH=(select MONTH(getdate())) 

我在这里无法显示在STARTDATE的日期。

SET @STARTDATE = '[email protected]+-+YEAR+' 
IF (
     @MONTH = 4 
     OR @MONTH = 6 
     ) 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
IF (@MONTH/4 = 0) 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
ELSE 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
+1

后找到@startdate,只加1个月,然后使用DATEADD()函数减去1天 – Eralper

回答

3
select @STARTDATE = dateadd(m, datediff(m, 0, current_timestamp), 0) startdate, 
     @ENDDATE = dateadd(m, datediff(m, 0, current_timestamp) + 1, -1) enddate 
+2

当我们试图在'@STARTDATE'和'@ENDDATE'之间检索数据时。然后,该记录将不会被检索到哪个交易日期与'@ENDDATE'相同。因为'@ ENDDATE'的时间是凌晨12:00。 – Shell

+2

@Nimesh - 如果您想要搜索具有时间组件的日期时间数据,通常最好使用*独占*终点进行搜索(即,在此处将'@ ENDDATE'设置为以下第一个月),然后在比较中使用'<'而不是'<='。 –

+1

@Nimesh Damien是对的。但是,当您试图过滤记录时,如果交易日期包含时间,则不会检索最后日期的记录。 – 2014-03-04 10:03:56

相关问题