各位大侠,如何求任意两个日期之间的天数,如:
开始日期      结束日期     以天计算差异多少天     以“00-00-00”形式计算差异多少年多少月多少天(每月按30天计算)
2010-02-04   2010-02-10 6                                    00-00-06
2009-08-18   2009-09-21 34                             00-01-04
2009-01-01   2010-02-04 400                             01-01-10--构建测试环境:
IF  OBJECT_ID('t') IS NOT NULL DROP TABLE t
GOCREATE TABLE t(开始日期 datetime,结束日期 datetime,以天计算差异多少天 int,
每月按30天计算计算差异多少年多少月多少天 nvarchar(8))
INSERT t
SELECT '2010-02-04','2010-02-10','','' UNION ALL
SELECT '2009-08-18','2009-09-21','','' UNION ALL
SELECT '2009-01-01','2010-02-04','','' UNION ALL
SELECT '2009-12-09','2010-03-15','','' UNION ALL
SELECT '2010-04-20','2010-04-21','','' UNION ALL
SELECT '2010-05-12','2010-05-17','','' UNION ALL
SELECT '2010-01-09','2010-06-04','','' UNION ALL
SELECT '2010-03-12','2010-03-18','','' UNION ALL
SELECT '2010-04-09','2010-04-14','','' UNION ALL
SELECT '2009-07-20','2010-02-05','','' GO
SELECT * FROM t

解决方案 »

  1.   

    SELECT 
    RIGHT('00'+LTRIM(DATEDIFF(DD,'2009-01-01', '2010-02-04')/360),2)+'-'+
    RIGHT('00'+LTRIM((DATEDIFF(DD,'2009-01-01', '2010-02-04')%360)/30),2)+'-'+
    RIGHT('00'+LTRIM(DATEDIFF(DD,'2009-01-01', '2010-02-04')%360%30),2)
      

  2.   

    select datediff(dd,'20100501','20100601')
      

  3.   

    --构建测试环境:
    IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
    GOCREATE TABLE t(开始日期 datetime,结束日期 datetime,以天计算差异多少天 int,
    每月按30天计算计算差异多少年多少月多少天 nvarchar(8))
    INSERT t
    SELECT '2010-02-04','2010-02-10','','' UNION ALL
    SELECT '2009-08-18','2009-09-21','','' UNION ALL
    SELECT '2009-01-01','2010-02-04','','' UNION ALL
    SELECT '2009-12-09','2010-03-15','','' UNION ALL
    SELECT '2010-04-20','2010-04-21','','' UNION ALL
    SELECT '2010-05-12','2010-05-17','','' UNION ALL
    SELECT '2010-01-09','2010-06-04','','' UNION ALL
    SELECT '2010-03-12','2010-03-18','','' UNION ALL
    SELECT '2010-04-09','2010-04-14','','' UNION ALL
    SELECT '2009-07-20','2010-02-05','',''  GO
    UPDATE t 
    SET 每月按30天计算计算差异多少年多少月多少天=
    LTRIM(DATEDIFF(d,开始日期,结束日期)/(30*12))+'年'+
    LTRIM(DATEDIFF(d,开始日期,结束日期)%(30*12)/30)+'月'+
    LTRIM(DATEDIFF(d,开始日期,结束日期)%(30*12)%30)+'日' SELECT *FROM t
    /*
    开始日期                    结束日期                    以天计算差异多少天   每月按30天计算计算差异多少年多少月多少天
    ----------------------- ----------------------- ----------- ---------------------
    2010-02-04 00:00:00.000 2010-02-10 00:00:00.000 0           0年0月6日
    2009-08-18 00:00:00.000 2009-09-21 00:00:00.000 0           0年1月4日
    2009-01-01 00:00:00.000 2010-02-04 00:00:00.000 0           1年1月9日
    2009-12-09 00:00:00.000 2010-03-15 00:00:00.000 0           0年3月6日
    2010-04-20 00:00:00.000 2010-04-21 00:00:00.000 0           0年0月1日
    2010-05-12 00:00:00.000 2010-05-17 00:00:00.000 0           0年0月5日
    2010-01-09 00:00:00.000 2010-06-04 00:00:00.000 0           0年4月26日
    2010-03-12 00:00:00.000 2010-03-18 00:00:00.000 0           0年0月6日
    2010-04-09 00:00:00.000 2010-04-14 00:00:00.000 0           0年0月5日
    2009-07-20 00:00:00.000 2010-02-05 00:00:00.000 0           0年6月20日(10 行受影响)
    */
      

  4.   

    --构建测试环境:
    IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
    GOCREATE TABLE t(开始日期 datetime,结束日期 datetime,以天计算差异多少天 int,
    每月按30天计算计算差异多少年多少月多少天 nvarchar(8))
    INSERT t
    SELECT '2010-02-04','2010-02-10','','' UNION ALL
    SELECT '2009-08-18','2009-09-21','','' UNION ALL
    SELECT '2009-01-01','2010-02-04','','' UNION ALL
    SELECT '2009-12-09','2010-03-15','','' UNION ALL
    SELECT '2010-04-20','2010-04-21','','' UNION ALL
    SELECT '2010-05-12','2010-05-17','','' UNION ALL
    SELECT '2010-01-09','2010-06-04','','' UNION ALL
    SELECT '2010-03-12','2010-03-18','','' UNION ALL
    SELECT '2010-04-09','2010-04-14','','' UNION ALL
    SELECT '2009-07-20','2010-02-05','',''  GO
    UPDATE t 
    SET 每月按30天计算计算差异多少年多少月多少天=
    RIGHT(1000+DATEDIFF(d,开始日期,结束日期)/(30*12),2)+'-'+
    RIGHT(1000+DATEDIFF(d,开始日期,结束日期)%(30*12)/30,2)+'-'+
    RIGHT(1000+DATEDIFF(d,开始日期,结束日期)%(30*12)%30,2)SELECT *FROM t
    /*
    开始日期                    结束日期                    以天计算差异多少天   每月按30天计算计算差异多少年多少月多少天
    ----------------------- ----------------------- ----------- ---------------------
    2010-02-04 00:00:00.000 2010-02-10 00:00:00.000 0           00-00-06
    2009-08-18 00:00:00.000 2009-09-21 00:00:00.000 0           00-01-04
    2009-01-01 00:00:00.000 2010-02-04 00:00:00.000 0           01-01-09
    2009-12-09 00:00:00.000 2010-03-15 00:00:00.000 0           00-03-06
    2010-04-20 00:00:00.000 2010-04-21 00:00:00.000 0           00-00-01
    2010-05-12 00:00:00.000 2010-05-17 00:00:00.000 0           00-00-05
    2010-01-09 00:00:00.000 2010-06-04 00:00:00.000 0           00-04-26
    2010-03-12 00:00:00.000 2010-03-18 00:00:00.000 0           00-00-06
    2010-04-09 00:00:00.000 2010-04-14 00:00:00.000 0           00-00-05
    2009-07-20 00:00:00.000 2010-02-05 00:00:00.000 0           00-06-20(10 行受影响)
    */