用Procedure取得全月的日期

方法1:

CREATE Procedure xl_ShinchokuWeek
	@tyosaDT varchar(7)
As

	DECLARE @tblMonthTyosa TABLE(
		[tyosaDT][varchar](14),
		[cntTyosaJishi][int] ,
		[cntTyosain][int],
		[cntTensaku1][int],
		[cntTensaku2][int],
		[cntCount][int],	--データの順番   
		[cntWeek][int],		--週目
		[cntGokei][int]		--合計フラグ 0:普通の時間、1:週間合計、2:月間合計
	) 

	DECLARE	@datefirst	datetime   
	DECLARE	@datelast	datetime
	DECLARE	@dateCnt	datetime
	DECLARE	@count		int	
	DECLARE	@week		int	
	DECLARE	@group		int	--計算用
    	
	Set @count = 1
	Set @week = 1
	Set @group = 1

	/*開始時間*/
	Set @datefirst = cast(@tyosaDT + '/01' as datetime)
    
	while datepart(dw,@datefirst) <> 2
		Begin 
			Set @datefirst = datediff(day,1,@datefirst)
		End

	/*結束時間*/
	Set @datelast = cast(datediff(d,1,dateadd(m,1,cast(@tyosaDT + '/01' as datetime))) as datetime)
    
	while datepart(dw,@datelast) <> 1
		Begin 
			Set @datelast = dateadd(day,1,@datelast)
		End
		
	/*時間*/
	Set @dateCnt = @datefirst

	WHILE @dateCnt <= @datelast
		Begin     
			--普通のデータ
			Insert into @tblMonthTyosa(tyosaDT, cntTyosaJishi, cntTyosain, cntTensaku1, cntTensaku2, cntCount, cntWeek, cntGokei)
			VALUES(substring(CONVERT(char(10),@dateCnt,111),1,10) + CASE datepart(dw,@dateCnt) WHEN 1 THEN '(日)' WHEN 2 THEN '(月)'  WHEN 3 THEN '(火)'  WHEN 4 THEN '(水)'  WHEN 5 THEN '(木)'  WHEN 6 THEN '(金)'  WHEN 7 THEN '(土)' END, 0, 0, 0, 0, @count, @week, 0)
			
			Set @count = @count + 1
			Set @group = @group + 1
			
			IF @group =8
				Begin
					--週間合計
					Insert into @tblMonthTyosa(tyosaDT, cntTyosaJishi, cntTyosain, cntTensaku1, cntTensaku2, cntCount, cntWeek, cntGokei)
					VALUES('週間合計', 0, 0, 0, 0, @count, @week, 1)
		
					Set @count = @count + 1
					Set @group = 1
					Set @week = @week + 1
				End

			
			Set @dateCnt = dateadd(d,1,@dateCnt)
		End
	
	WHILE @dateCnt > @datelast and @count<>0
		Begin     
			--月間合計
			Insert into @tblMonthTyosa(tyosaDT, cntTyosaJishi, cntTyosain, cntTensaku1, cntTensaku2, cntCount, cntWeek, cntGokei)
			VALUES('月間合計', 0, 0, 0, 0, @count, 0, 2)
			
			Set @count = 0
		End	
	
	SELECT  		
		*
	FROM @tblMonthTyosa 
 	ORDER BY cntCount

	return
GO

方法2:
drop proc xl_temp
go


CREATE Proc xl_Temp
	@tyosaDT varchar(7),
	@count	int output   ,
	@temp varchar output,
	@datetime datetime output
As
begin
	DECLARE @tblMonthTyosa TABLE(
		[tyosaDT][varchar](14),
		[cntTyosaJishi][int] ,
		[cntTyosain][int],
		[cntTensaku1][int],
		[cntTensaku2][int]
	) 

	DECLARE	@datefirst	datetime   
	DECLARE	@datelast	datetime
	DECLARE	@dateCnt	datetime
	/*DECLARE	@count	int   */
    	
	Set @count = 0

	/*開始時間*/
	Set @datefirst = cast(@tyosaDT + '/01' as datetime)
    

	while datepart(dw,@datefirst) <> 2
		Begin 
			Set @datefirst = cast(datediff(day,1,@datefirst) as datetime)	
		End

	/*結束時間*/
	Set @datelast = cast(datediff(d,1,dateadd(m,1,cast(@tyosaDT + '/01' as datetime))) as datetime)
    
	while datepart(dw,@datelast) <> 1
		Begin 
			Set @datelast = cast(dateadd(day,1,@datelast) as datetime)
		End
		
	/*時間*/
	Set @dateCnt = @datefirst

	Set @datetime = @datelast	

	WHILE @dateCnt <= @datelast
		Begin     
			Insert into @tblMonthTyosa(tyosaDT)
			VALUES(substring(CONVERT(char(10),@dateCnt,111),1,10) + CASE datepart(dw,@dateCnt) WHEN 1 THEN '(日)' WHEN 2 THEN '(月)'  WHEN 3 THEN '(火)'  WHEN 4 THEN '(水)'  WHEN 5 THEN '(木)'  WHEN 6 THEN '(金)'  WHEN 7 THEN '(土)' END)

			Set @count = @count +1
			Set @dateCnt = dateadd(d,1,@dateCnt)
		End

	SELECT  		
		*
	FROM @tblMonthTyosa 
 	ORDER BY tyosaDT
end
go

declare @cnttemp int
declare @temp varchar
declare @datetime datetime
exec xl_Temp '2008/09',@cnttemp output,@temp output,@datetime output
print @cnttemp
print @temp
print @datetime


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值