sql生成一個日期表



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  lidongbo
-- Create date: <Create Date,,>
-- Description: 生成日期表,為營業統計使用
-- =============================================
CREATE PROCEDURE CreateDateTable
 -- Add the parameters for the stored procedure here
 @p_startTime datetime,
 @p_endTime datetime
AS
BEGIN
 /************生成時間臨時表********/
create table #etTtime_TempTable (
 [ID] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,
        [日期列] DateTime,
[門店編號列] varchar(50)
)
declare @etKdd int,@etKmmStr nvarchar(13),@etKddStr nvarchar(13),@etKwwStr nvarchar(13),@etKqqStr nvarchar(13),@start_Time datetime,@end_Time datetime,@type_Time int,@mdbh varchar(50)
--set @start_Time='2010-01-01'/*設置起始時間*/
--set @end_Time='2100-12-31'/*設置終止時間*/
set @start_Time=@p_startTime/*設置起始時間*/
set @end_Time=@p_endTime/*設置終止時間*/
set @type_Time=1   /*生成類型 1為天 2為周 3為月 4為季度 5為年*/
set @mdbh='zlwy4000480006'
WHILE @start_Time<@end_Time /**/
begin
set @etKdd=datepart(dd,@start_Time)
set @etKddStr=cast(@etKdd as nvarchar(13))

set @etKdd=datepart(mm,@start_Time)
set @etKmmStr=cast(@etKdd as nvarchar(13))

set @etKdd=datepart(ww,@start_Time)
set @etKwwStr=cast(@etKdd as nvarchar(13))

set @etKdd=datepart(qq,@start_Time)
set @etKqqStr=cast(@etKdd as nvarchar(13))

if @type_Time=1
Begin
INSERT INTO #etTtime_TempTable (日期列,門店編號列) VALUES (cast(datepart(yy,@start_Time)as nvarchar(13))+'-'+@etKmmStr+'-'+@etKddStr,@mdbh)
SET @start_Time=DATEADD(dd,1,@start_Time)
End
if @type_Time=2
Begin
INSERT INTO #etTtime_TempTable (日期列,門店編號列) VALUES (cast(datepart(yy,@start_Time)as nvarchar(13))+'-'+@etKwwStr,@mdbh)
SET @start_Time=DATEADD(ww,1,@start_Time)
End
if @type_Time=3
Begin
INSERT INTO #etTtime_TempTable (日期列,門店編號列) VALUES (cast(datepart(yy,@start_Time)as nvarchar(13))+'-'+@etKmmStr,@mdbh)
SET @start_Time=DATEADD(mm,1,@start_Time)
End
if @type_Time=4
Begin
INSERT INTO #etTtime_TempTable (日期列,門店編號列) VALUES (cast(datepart(yy,@start_Time)as nvarchar(13))+'-'+@etKqqStr,@mdbh)
SET @start_Time=DATEADD(qq,1,@start_Time)
End
if @type_Time=5
Begin
INSERT INTO #etTtime_TempTable (日期列,門店編號列) VALUES (cast(datepart(yy,@start_Time)as nvarchar(13)),@mdbh)
SET @start_Time=DATEADD(yy,1,@start_Time) /*循環開始時間加1 直到等於設置的終止時間*/
End

Continue
End

/*查詢臨時表*/
--Select * From #etTtime_TempTable
--delete from datetable
insert into datetable select id, 日期列 from  #etTtime_TempTable
/*刪除臨時表*/
Drop Table #etTtime_TempTable
END
GO


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM