0
点赞
收藏
分享

微信扫一扫

SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)

90哦吼 2022-08-19 阅读 61
ide数据库


背景:有时侯导报表需要动态计算每个月对应每周的第一天与最后一天。最后一周的时间要求不需要仅精确到第7天,可以算10天。


USE [***]
GO

/****** Object: StoredProcedure [dbo].[sp_CalcStartDateEndDateForSingleYearMonthInDate] Script Date: 2016/2/25 14:28:26 ******/
DROP PROCEDURE [dbo].[sp_CalcStartDateEndDateForSingleYearMonthInDate]
GO

/****** Object: StoredProcedure [dbo].[sp_CalcStartDateEndDateForSingleYearMonthInDate] Script Date: 2016/2/25 14:28:26 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO







/*

exec [sp_CalcStartDateEndDateForSingleYearMonthInDate] '2016-1-1'
exec [sp_CalcStartDateEndDateForSingleYearMonthInDate] '2015-10-1'
exec [sp_CalcStartDateEndDateForSingleYearMonthInDate] '2015-9-1'
exec [sp_CalcStartDateEndDateForSingleYearMonthInDate] '2014-3-1'

*/

CREATE PROC [dbo].[sp_CalcStartDateEndDateForSingleYearMonthInDate](
@SingleDate datetime
)
AS
BEGIN


DECLARE @month VARCHAR(2)
DECLARE @year VARCHAR(4)

DECLARE @FirstDayInFeb DATETIME
DECLARE @LastDayInFeb DATETIME

if(@SingleDate is null)
set @SingleDate=getdate()

SET @month= MONTH(@SingleDate)
SET @year=YEAR(@SingleDate)

SET @FirstDayInFeb = CONVERT(DATETIME, @year+'-02-01')
SET @LastDayInFeb = DATEADD(M, 1, @FirstDayInFeb)
SET @LastDayInFeb = DATEADD(D, -1, @LastDayInFeb)


--drop table @tWeek

--CREATE TABLE @tWeek
--(
--startDate VARCHAR(10),
--endDate VARCHAR(10),
--weekIndex INT
--)

declare @tWeek TABLE
(
startDate VARCHAR(10),
endDate VARCHAR(10),
weekIndex INT
)

INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-1',@year+'-'+@month+'-7', 1)
INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-8',@year+'-'+@month+'-14', 2)
INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-15',@year+'-'+@month+'-21', 3)

IF @month IN (1,3,5,7,8,10,12)

INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-22',@year+'-'+@month+'-31', 4)

IF @month IN (4,6,9,11)

INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-22',@year+'-'+@month+'-30', 4)

IF @month=2

INSERT INTO @tWeek VALUES ( @year+'-'+@month+'-22', CONVERT(VARCHAR(10),@LastDayInFeb,120),4)


SELECT * FROM @tWeek



END








GO

运行结果:

SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)_ide

SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)_ide_02

SQL 输出某一天所在的年月对应的所有星期的开始与结束日期(每个月仅算4周,第四周可能会有10天)_ide_03

举报

相关推荐

0 条评论