Sql server 我需要将开始日期和结束日期设置为存储过程中的变量

Sql server 我需要将开始日期和结束日期设置为存储过程中的变量,sql-server,Sql Server,我的要求是将@STARTDATE变量设置为01[开始日期]-月[当前月份]-年[当前年份],并基于2月28日、1月31日的月@ENDDATE变化 DECLARE @STARTDATE DATETIME DECLARE @ENDDATE DATETIME 我们根据月份划分结束日期 DECLARE @MONTH int SET @MONTH=(select MONTH(getdate())) 在这里,我无法在STARTDATE中显示日期 SET @STARTDAT

我的要求是将@STARTDATE变量设置为01[开始日期]-月[当前月份]-年[当前年份],并基于2月28日、1月31日的月@ENDDATE变化

     DECLARE @STARTDATE DATETIME
 DECLARE @ENDDATE DATETIME
我们根据月份划分结束日期

     DECLARE @MONTH int
     SET @MONTH=(select MONTH(getdate()))
在这里,我无法在STARTDATE中显示日期

SET @STARTDATE = '01-+@MONTH+-+YEAR+'
IF (
        @MONTH = 4
        OR @MONTH = 6
        )
    SET @ENDDATE = '30-+@MONTH+-+YEAR+'
IF (@MONTH / 4 = 0)
    SET @ENDDATE = '29-+@MONTH+-+YEAR+'
ELSE
    SET @ENDDATE = '28-+@MONTH+-+YEAR+'

引入了SQL Server 2012,它返回引用月份的最后日期

这里有一个例子

SELECT EOMONTH(GETDATE())

引入了SQL Server 2012,它返回引用月份的最后日期

这里有一个例子

SELECT EOMONTH(GETDATE())

找到@startdate后,当我们试图检索
@startdate
@ENDDATE
之间的数据时,只需添加1个月,然后使用DATEADD()函数减去1天。找到@startdate后,只需添加1个月,然后使用DATEADD()函数减去1天。则不会检索交易日期与
@ENDDATE
相同的记录。因为
@ENDDATE
的时间是凌晨12:00。@Nimesh-如果您想搜索包含时间成分的日期时间数据,通常最好使用一个专用的搜索终点(即,在这里您将
@ENDDATE
设置为下个月的1号),然后使用
@Nimesh Damien是正确的。但是,当您试图筛选记录时,如果事务日期包含时间,则不会检索到上次日期的记录。@danta和Nimesh的问题是询问当前月份的第一天和最后一天。我认为你的推测是不正确的,因为这些日期的用途还没有描述。当我们试图检索
@STARTDATE
@ENDDATE
之间的数据时。则不会检索交易日期与
@ENDDATE
相同的记录。因为
@ENDDATE
的时间是凌晨12:00。@Nimesh-如果您想搜索包含时间成分的日期时间数据,通常最好使用一个专用的搜索终点(即,在这里您将
@ENDDATE
设置为下个月的1号),然后使用
@Nimesh Damien是正确的。但是,当您试图筛选记录时,如果事务日期包含时间,则不会检索到上次日期的记录。@danta和Nimesh的问题是询问当前月份的第一天和最后一天。我认为你的猜测是不正确的,因为这些日期的目的还没有被描述。