怎样计算:
2007年第10周的周一是几月几号?
得到了几月几号之后,再加成12天后,又是几月几号?那只是例子,可能是2008年,第20周,周二等.

解决方案 »

  1.   

    --得到了几月几号之后,再加成12天后,又是几月几号?
    select dateadd(day,12,getdate())
      

  2.   

    好象是这么....-- 2007年第10周的周一是几月几号?
    SELECT DATEADD(DAY, 10 * 7, 2007-1-1)
    -- 得到了几月几号之后,再加成12天后,又是几月几号
    SELECT DATEADD(DAY, 12, DATEADD(DAY, 10 * 7, 2007-1-1))
      

  3.   

    set datefirst 1
    ----2007年第10周的周一是几月几号
    select dateadd(week,10,'2009-01-01')
    ----得到了几月几号之后,再加成12天后,又是几月几号?
    select dateadd(day,12,dateadd(week,10,'2009-01-01'))/*
    结果1:
    2009-03-12 00:00:00.000结果2:
    2009-03-24 00:00:00.000
    */
      

  4.   

    各位大哥,那怎样得到这们的结果:表:t1
     services   港口   到港   离港   SI截关   CY截关   TT(所需天数)
      c1        香港   周日   周日    周五     周六 
      c1       他科马  周五   周六                     12
      c1       奥克兰  周一   周二                     15               
      c1       檀香山  周六   周日                     20
      c1       关岛    周二   周三                     30
    表:t2
     Services    年份     第几周
       c1        2007      34
       c1        2008      34要得到这样的结果:                              香港                        到港时间
    services 年份 第几周 到港 离港 SI截关 CY截关 他科马  奥克兰  檀香山  关岛
    c1       2007  34    8-19 8-19 8-24   8-25    8-31    9-3     9-8    9-13
    c1       2008  34    ?    ?..............................................
    ..
    ..也就是说:在t1中已经有了周几和TT(例如:从香港到他科马需要12天),
    在t2中有对应的services,然后通过年份和给出的第几周,来得到那样的结果.
    例如:上面的,从香港到他科马需要12天,那么我要得到:2007年,第34周,
    到他科马是几月几日?http://community.csdn.net/Expert/topic/5723/5723453.xml?temp=.7266504
      

  5.   

    抱歉,上面的回复把2007写成2009了,更正一下:----设置星期一作为每周的第一天
    set datefirst 1
    ----2007年第10周的周一是几月几号
    select dateadd(week,10,'2007-01-01')
    ----得到了几月几号之后,再加成12天后,又是几月几号?
    select dateadd(day,12,dateadd(week,10,'2007-01-01'))/*
    结果1:
    2007-03-12 00:00:00.000结果2:
    2007-03-24 00:00:00.000
    */
      

  6.   

    LZ的意思是不要年份?
    先用LS大大的方法得到日期,然后截断用substring
    表联合用 left jion 就可以了
    看你发了那么多贴LZ辛苦了
      

  7.   

    抱歉,更正一下,上面的回复中“2007年第10周的周一是几月几号”有误:
    ----2007年第10周的周一是几月几号
    select dateadd(week,10,'2007-01-01')
    --------------------------------------------------------
    上面这个计算的结果只是2007年第10周是几月几号,但不一定就是星期一,更正一下:
    select dateadd(day,-(datepart(weekday,dateadd(week,10,'2007-01-01')) - 1),dateadd(week,10,'2007-01-01'))/*结果
    2007-03-12 00:00:00.000
    */
      

  8.   

    CREATE FUNCTION fun_date(@year INT, @week INT, @weekday INT)--数据范围@year 1753--9999;@week 1--53;weekday 1--7(Sunday--Saturday)
    RETURNS DATETIME
    AS
    BEGIN
    DECLARE @date DATETIME--, @year INT, @week INT, @weekday INT
    SET @date = RTRIM(@year)+'-1-1'
    SET @date = @date + (@week-1)*7 + @weekday - 2
    RETURN @date
    END--2007年第10周的周一是几月几号?
    SELECT dbo.fun_date(2007, 10, 2)-----------------------
    2007-03-05 00:00:00.000(1 行受影响)
    --得到了几月几号之后,再加成12天后,又是几月几号?
    SELECT dbo.fun_date(2007, 10, 2) + 12-----------------------
    2007-03-17 00:00:00.000(1 行受影响)
    --2008年,第20周,周二.
    SELECT dbo.fun_date(2008, 20, 3)-----------------------
    2008-05-14 00:00:00.000(1 行受影响)
      

  9.   

    结果3错了!2008-05-14 是星期三望高手改正.我的解题思路
    @year年  例:2007
    @week周数 例:10
    @weekday星期 例:周一
    数据范围@year 1753--9999;@week 1--53;weekday 1--7(Sunday--Saturday)a.将@year 转换成:2007-1-1
    b.将2007-1-1 + (10-1)*7 + 2 - 2
       上面的'-1'和'-2'是我加的权值,问题很有可能出在这里!
    c.函数返回正确日期:2007-03-05 00:00:00.000
    哪位还有更好的方法?
      

  10.   

    上边计算日期的方法只有在01月01日为星期一的年份才是准确的
    可能是SQL Server里边提供的方法就是把01月01日做为星期一来计算的
      

  11.   


    go
    CREATE FUNCTION fun_date(@year INT, @week INT, @weekday INT)--数据范围@year 1753--9999;@week 1--53;weekday 1--7(Sunday--Saturday)
    RETURNS DATETIME
    AS
    BEGIN
    DECLARE @date DATETIME--, @year INT, @week INT, @weekday INT
    declare @i int
    SET @date = Convert(datetime,(Convert(varchar(4),@year)+'-01-01'))
    set @i=datepart(weekday,@date) SET @date = dateadd(day,(@week-1)*7,@date)
    set @date = dateadd(day,(@weekday-1),@date)
    set @date = @date-@i+1
    RETURN @date
    END
    go
    --2007年第10周的周一是几月几号?
    SELECT dbo.fun_date(2008, 20, 2)
    drop function fun_date经过测试2008年的也没问题
      

  12.   

    嗯嗯~1月1号不是星期一要像zjexe(比正牌多两个横)那样写
    不过我用了您的代码还是没有解决楼主那个开船的问题,好长,我好弱~厄~
      

  13.   

    --试试这个,比较简单
    declare @vDate datetime  --开始日期
    declare @vNumber int --datepart的数字
    set @vDate='2007-1-1'
    set @vNumber=10
    select dateadd(ww,datediff(ww,0,@vDate)+@vNumber,0)
    --0被SQL Server 系统默认为:1900-01-01(星期一),依次类推,这个方法也比较实用,推荐楼主看下