当前位置:Gxlcms > 数据库问题 > sql server2008 如何获取上月、上周、昨天、今天、本周、本月的查询周期(通过存储过程)

sql server2008 如何获取上月、上周、昨天、今天、本周、本月的查询周期(通过存储过程)

时间:2021-07-01 10:21:17 帮助过:18人阅读

存储过程语法-- create proc sp_GetDateCycle ( @DateRage varchar(20), --输入参数 @startDate varchar(30) , --输出参数 @endDate varchar(30) -- 输出参数 ) as begin if(@DateRage = ‘上月’) begin --返回日期的算法 end if(@DateRage = ‘上周’) begin --返回日期的算法 end --继续判断--- ----- end go

3、实例如下

/***********************************************
根据日期周期类型返回查询周期
输入参数:@DateRage:日期周期类型
输出参数:@startDate:查询周期的开始日期
          @endDate:查询周期的结束日期
***********************************************/
/***
** 获取查询的周期
***/
create proc [dbo].[sp_GetDateCycle](
    @DateRage varchar(20),
    @startDate varchar(30) output,
    @endDate varchar(30) output
)
as 
begin 
    --声明变量--
    declare @nowDate datetime
    declare @startstr varchar(20)
    declare @endstr varchar(20) 
    declare @datestr1 varchar(30)
    declare @datestr2 varchar(30)
    --初始化变量--
    set @startstr =  00:00:00
    set @endstr =  23:59:59
    
    --进行日期范围判断--
    if(@DateRage=上月)
    begin
        ----计算当前日期与sql的初始日期(1900-01-01 00:00:00)的差值,返回月份
        --select DATEDIFF(MM,0,GETDATE())
        ----返回月份减去1,计算出上个月第一天日期--
        --select DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0)
        ----获取当前月第一天日期--
        --select DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)
        ----减去3毫秒,计算出上个月的最后一天日期(sql精确到3毫秒)--
        --select DATEADD(MS,-3,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0))            
        
        --返回上月查询日期(开始到结束) 日期类型转字符类型--
        set @startDate = CONVERT(varchar(19),DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0),120)    
        set @endDate = CONVERT(varchar(19),DATEADD(MS,-3,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)),120)
    end
    if(@DateRage =上周)
    begin
        -- --计算当前日期与sql的初始日期差值(返回周)--
        --select DATEDIFF(wk,0,GETDATE())
        ----返回的周期数减去1,,得到上周星期一的日期--
        --SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1,0) 
        ----获取本周星期一的日期--
        --SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0) 
        ----减去3毫秒,计算上周星期天的日期--
        --select DATEADD(MS,-3, DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0))
        
        --返回上周查询日期(开始到结束) 日期类型转字符类型 --
        set @startDate = CONVERT(varchar(19),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1,0),120)
        set @endDate = CONVERT(varchar(19),DATEADD(MS,-3, DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0)),120)
    end
    if(@DateRage=昨天)
    begin
        /***
        思考步骤如下:
        1)获取昨天日期(日期类型 yyyy-MM-dd hh:mm:ss)        
        2)转化昨天日期(字符类型 yyyy-MM-dd)
        3)返回查询日期(开始日期到结束日期)
        ***/    
        
        ----获取昨天日期--
        -- select DATEADD(DAY,-1,GETDATE())
        --将日期类型转换为字符类型(yyyy-MM-dd)
        select @datestr1 = CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)    
        select @datestr2 = CONVERT(varchar(10),DATEADD(DAY,-1,GETDATE()),120)
        --返回昨天查询日期(开始到结束)--
        set @startDate = @datestr1 + @startstr
        set @endDate = @datestr2 + @endstr
    end
    if(@DateRage=今天)
    begin
        /***
        思考步骤如下:
        1)获取当前日期(日期类型 yyyy-MM-dd hh:mm:ss)
        2)转化当前日期(字符类型 yyyy-MM-dd)
        3)返回查询日期(开始日期到结束日期)
        ***/
        ---- 获取当前日期--
        --select DATEADD(DAY,0,GETDATE())
        --将日期类型转换为字符类型(yyyy-MM-dd)
        select @datestr1 = CONVERT(varchar(10),DATEADD(DAY,0,GETDATE()),120)
        select @datestr2 = CONVERT(varchar(10),DATEADD(DAY,0,GETDATE()),120)
        --返回今天查询日期(开始到结束)--
        set @startDate = @datestr1 + @startstr
        set @endDate = @datestr2  + @endstr
    end
    if(@DateRage=本周)
    begin
     --   --计算当前日期与sql的初始日期差值(返回周)--
        --select DATEDIFF(wk,0,GETDATE())
        ----获取本周的星期一的日期--
        --SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0) 
        ----返回的周期数加上1,计算下周的星期一的日期--
        --SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE())+1,0) 
        ----减去3毫秒,计算本周星期天的日期--
        --select DATEADD(MS,-3,DATEADD(wk,DATEDIFF(wk,0,GETDATE())+1,0))
        
        --返回本周查询日期(开始到结束)--
        set @startDate = CONVERT(varchar(19), DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0),120)
        set @endDate = CONVERT(varchar(19),DATEADD(MS,-3,DATEADD(wk,DATEDIFF(wk,0,GETDATE())+1,0)),120)
    end
    if(@DateRage=本月)
    begin
     --   --计算当前日期与sql的初始日期(1900-01-01 00:00:00)的差值,返回月份
        --select DATEDIFF(MM,0,GETDATE())
        ----得到当前月第一天日期--
        --select DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)
        ----返回月份加上1,计算出下个月第一天日期--
        --select DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0)
        ----减去3毫秒,计算出当前月的最后一天日期--
        --select DATEADD(MS,-3,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0))
            
        --返回本月的查询日期(开始到结束----        
        --将当前月第一天日期转化(日期类型转字符类型)
        set @startDate = CONVERT(varchar(19),DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0),120)
        --将当前月最后一天日期转化(日期类型转字符类型)
        set @endDate = CONVERT(varchar(19),DATEADD(MS,-3,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0)),120)
    end    
end

点击执行,生成存储过程: sp_GetDateCycle

4、调用存储过程

创建成功后,怎样调用辨析的存储过程呢?

--声明输出参数--
declare @startDate varchar(30)
declare @endDate varchar(30)
--获取上个月的查询日期--
--exec sp_GetDateCycle ‘上月‘,@startDate output,@endDate output 
--获取上周的查询日期--
--exec sp_GetDateCycle ‘上周‘,@startDate output,@endDate output 
--获取昨天的查询日期--
--exec sp_GetDateCycle ‘昨天‘,@startDate output,@endDate output 
--获取今天的查询日期--
--exec sp_GetDateCycle ‘今天‘,@startDate output,@endDate output 
--获取本周的查询日期--
exec sp_GetDateCycle 本周,@startDate output,@endDate output 
--获取本月的查询日期--
--exec sp_GetDateCycle ‘本月‘,@startDate output,@endDate output 
--输出查询周期---
select @startDate
select @endDate

5、实际效果如下:

1)当调用存储过程输入参数为今天,返回的日期范围

技术分享

2)当调用存储过程输入参数为上周,返回的日期范围

技术分享

3)当调用存储过程输入参数为上月,返回日期范围

技术分享

人气教程排行