declare @t datetime
set @t = getdate()
select dateadd(day,270,@t)
/*
(无列名)
----------------------
2010-04-05 16:55:44.500
*/

解决方案 »

  1.   

    --这样?
    SELECT DATEADD(MONTH, 270/30, '2008/04/25')
    /*
    2009-01-25 00:00:00.000
    */
      

  2.   

    CREATE FUNCTION FN_REPSTR(
    @收货记录 VARCHAR(50),@有效期 INT)
    RETURNS VARCHAR(100)
    AS
    BEGIN
       DECLARE @R VARCHAR(100)
       DECLARE @S VARCHAR(100)
       DECLARE @I INT
       SET @R=''
       SET @I = CHARINDEX(' ',@收货记录)
       WHILE @I>0
       BEGIN
    SET @S=LEFT(@收货记录,@I-1)
    SET @收货记录 = STUFF(@收货记录,1,@I,'')
    IF ISDATE(@S) = 1
    SET @S= CONVERT(VARCHAR(10),DATEADD(DAY,@有效期,@S),111)
    SET @R = @R + @S +' '
    SET @I = CHARINDEX(' ',@收货记录)
      END
      SET @R = @R + @收货记录
      RETURN @R
    END
    GODECLARE @A TABLE (PARTNO VARCHAR(10),   UNIT VARCHAR(5),  QTY INT,   收货记录 VARCHAR(50),                 有效期 INT)
    INSERT @A SELECT
    '101-001',    'KG' ,     250 ,   '08/04/25  300'             , 270 
    UNION ALL SELECT
    '101-002',    'LYD' ,     500 ,   '09/04/25 200 09/02/02 360' ,   730 
    SELECT *
     ,到期日 = DBO.FN_REPSTR(收货记录,有效期)
    FROM @A -- 结果
    PARTNO     UNIT  QTY         收货记录                                               有效期         到期日
    ---------- ----- ----------- -------------------------------------------------- ----------- ----------------------------------------------------------------------------------------------------
    101-001    KG    250         08/04/25  300                                      270         2009/01/20  300
    101-002    LYD   500         09/04/25 200 09/02/02 360                          730         2011/04/25 200 2011/02/02 360
      

  3.   

    DECLARE @TB TABLE([PARTNO] VARCHAR(7), [UNIT] VARCHAR(3), [QTY] INT, [收货记录] VARCHAR(25), [有效期] INT, 到期日 VARCHAR(31))
    INSERT @TB 
    SELECT '101-001', 'KG', 250, '08/04/25 300', 270, NULL UNION ALL 
    SELECT '101-002', 'LYD', 500, '09/04/25 200 09/02/02 360', 730, NULLUPDATE @TB SET 到期日=[收货记录]UPDATE @TB 
      SET 到期日=STUFF(到期日,
     PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日),
     8,
     CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日), 8) AS DATETIME)), 120)
    )WHILE @@ROWCOUNT>0
    BEGIN  
        UPDATE @TB 
      SET 到期日=STUFF(到期日,
     PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1,
     8,
     CONVERT(VARCHAR(10), DATEADD(MONTH, [有效期]/30, CAST('20'+SUBSTRING(到期日, PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)+1, 8) AS DATETIME)), 120)
    )
    WHERE PATINDEX('%[ ][0-9][0-9]/[0-1][0-9]/[0-3][0-9]%', 到期日)>0  
    ENDSELECT * FROM @TB
    /*
    PARTNO  UNIT QTY         收货记录                      有效期         到期日
    ------- ---- ----------- ------------------------- ----------- -------------------------------
    101-001 KG   250         08/04/25 300              270         2009-01-25 300
    101-002 LYD  500         09/04/25 200 09/02/02 360 730         2011-04-25 200 2011-02-02 360
    */