各位大侠,如何求任意两个日期之间的天数,如:
开始日期 结束日期 以天计算差异多少天 以“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
开始日期 结束日期 以天计算差异多少天 以“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
解决方案 »
- 如何查询表中相同记录而这些记录在另外一张表的一个字段不同的记录
- 关于数据库设计,如果是存照片的字段,大家一般是设计为varchar存路径还是存二进制text?
- 今天算是遇到诡异的事了,两句完全相同的SQL竟然执行结果不同!
- Sql Server 中的 Analysis Service 都有哪些用处,谁能描述一下。
- 个人网站初学者工具包 怎么用啊
- 在SQLSERVER作业中怎样设置步骤?
- 要用select 语句得出某个栏位中是最大值的所有记录.急.谢谢.
- 请教,怎样让SELECT语句中的列与执行计划中的列一一对应起来?
- 我的数据库是SQL2000怎么远程连接空间供应商的数据库这么慢,无法操作
- SQL SERVER 2005 安装问题,晕
- 求一SQL函数组合,获取子字符串
- 视图, CTE有相同的效果,但有何区别???
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)
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 行受影响)
*/
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 行受影响)
*/