1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > sql server 如何获取上月 上周 昨天 今天 本周 本月的查询周期(通过存储过程)...

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

时间:2023-05-07 23:59:54

相关推荐

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

我这边有一个需求要统计订单数据,需要统计订单的上传日期,统计的模块大概是

那么上月、上周、昨天、今天、本周、本月应该是怎样呢?

1、数据分析

因为今天是动态数据,我要查月份(上月、本月),应该是一个日期范围(开始日期到结束日期)

要查周期(上周、本周),是星期一到星期天,要转化为日期范围

这样,将上月、上周、昨天、今天、本周、本月这些作为一个参数,我们来查询对应的日期范围。创建一个有输入参数和输出参数的存储过程,通过输入参数(周期类型)获取输出参数(日期范围

2、创建存储过程

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

3、实例如下

/***********************************************根据日期周期类型返回查询周期输入参数:@DateRage:日期周期类型输出参数:@startDate:查询周期的开始日期@endDate:查询周期的结束日期***********************************************//***** 获取查询的周期***/create proc [dbo].[sp_GetDateCycle](@DateRage varchar(20),@startDate varchar(30) output,@endDate varchar(30) output)as begin --声明变量--declare @nowDate datetimedeclare @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)endif(@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)endif(@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 + @startstrset @endDate = @datestr2 + @endstrendif(@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 + @startstrset @endDate = @datestr2 + @endstrendif(@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)endif(@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 @startDateselect @endDate

5、实际效果如下:

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

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

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

PS:

参考网址: /zengcong/article/details/50134373

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。