描述:表A,其中第一个列现在是float类型,数据从0到8759 就是一年365天的小时数的时间点
目的:想把它转化成日期的格式:'1月1日1时','1月1日2时'..'1月1日24时'..'1月2日1时...'一直到一年的结束,就按照2009年来算好了。
谢谢

解决方案 »

  1.   

    先求出每月最大天数
    if object_id('tb') is not null
    drop table tb
    create table tb(Mth int, Days int)
    declare @time datetime,
    @currentTime datetime,
    @month int
    --当前月第一天
    SET @currentTime = convert(varchar(8),getdate(),120) + '01 '
    select @currentTime
    SET @month = 1while @month <= 12
    BEGIN
    --由当前月第一天求出所有第month月的第一天
    SET @time = dateadd(month,-month(@currentTime)+@month + 1,@currentTime)
    insert into tb(Mth, Days) (select @month, day(DateAdd(dd,-1,@time)))
    SET @month = @month + 1
    END
    select * from tb
    drop table tb
    /*
    Mth         Days
    ----------- -----------
    1           31
    2           28
    3           31
    4           30
    5           31
    6           30
    7           31
    8           31
    9           30
    10          31
    11          30
    12          31(12 行受影响)
    */
      

  2.   

    if OBJECT_ID('Calendar')>0
    drop table  Calendar
    CREATE TABLE [dbo].Calendar (
       [Id] [int] IDENTITY (1, 1) NOT NULL ,
       [TheDate] [datetime] NULL ,
       [TheDay] [nvarchar] (15) NULL ,
       [TheHour] [varchar] (15) NULL,
       [TheMonth] [nvarchar] (15) NULL ,
       [TheYear] [smallint] NULL ,
       [DayOfMonth] [smallint] NULL ,
       [WeekOfYear] [smallint] NULL ,
       [MonthOfYear] [smallint] NULL ,
       [Quarter] [nvarchar] (2) NULL ,
       [fiscal_period] [nvarchar] (20) NULL
    ) ON [PRIMARY]  
    DECLARE @WeekString varchar(12),
    @dDate SMALLDATETIME,
    @sMonth varchar(20),
    @iYear smallint,
    @iDayOfMonth smallint,
    @iWeekOfYear smallint,
    @iMonthOfYear smallint,
    @sQuarter varchar(2),
    @sSQL varchar(100),
    @adddays int,
    @TheHour  intSELECT @adddays = 1 --日期增量(可以自由设定)
    SELECT @dDate = '01/01/2009' --开始日期
    SELECT @TheHour =0  
    WHILE @dDate <= '12/31/2009'  --结束日期
    BEGIN
      
       SELECT @WeekString = DATENAME (dw, @dDate)
       SELECT @sMonth=DATENAME(mm,@dDate)
       SELECT @iYear= DATENAME (yy, @dDate)
       SELECT @iDayOfMonth=DATENAME (dd, @dDate)
       SELECT @iWeekOfYear= DATENAME (week, @dDate)
       SELECT @iMonthOfYear=DATEPART(month, @dDate)
       SELECT @sQuarter = 'Q' +  CAST(DATENAME (quarter, @dDate)as varchar(1))
       SELECT @TheHour = @TheHour+1
       INSERT INTO Calendar
       (TheDate,TheDay, TheMonth, TheYear,  DayOfMonth, WeekOfYear,TheHour,
       MonthOfYear, Quarter) VALUES
       (@dDate, @WeekString, @sMonth, @iYear, @iDayOfMonth, @iWeekOfYear,@TheHour,
       @iMonthOfYear, @sQuarter)
       SELECT @dDate = dateadd(hh,1,@dDate)  
    END
    GOselect * from Calendar--在你的库里生成这样一张表然后用这表的第四列去和你的表进行连接
    取第一列值转换一下格式就行了