求到精确的月份差 如下select datediff(mm,'20091001','20091120')得到1,但实际上是1月多,那么我怎样得到精确的1.xx月呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的程序有个地方需要判断"1<月份差<2",但datediff(mm,'20091001','20091120')等于1月,就遗漏了,按理说应该落在"1<月份差<2"的 晕 你用between ...and 就OK了 包含边界值 程序里面是用>= && <= 但业务要求比较变态,正好差1月,算在0~1内,若差多于1个月,就要算在1~2,也就是> && <= 在"1 =<月份差 <2"的如何?其实按你的想法,直接写datediff(mm,'20091001','20091120')=1就可以了,再加上个dateadd来判断一下,是否满足一个月就好了。 >dateadd(month,@t,date) and <=dateadd(month,@t+1,date)这样写就行了 select DATEDIFF(DD,DATEADD(MM,datediff(MM,'20091001','20091120'),'20091001'),'20091120') select LTRIM(datediff(MM,'20091001','20091120'))+'月'+LTRIM(DATEDIFF(DD,DATEADD(MM,datediff(MM,'20091001','20091120'),'20091001'),'20091120'))+'天'/* ---------------------------- 1月19天(所影响的行数为 1 行)*/这样写,你判断一下就知道了,如果后面天数差>0则大于那个月 ----用“天数平均法”----也就是说:你的起始日期到终止日期,共几个月零几天,相差几个月,去相除,得到每月的平均天数,----再...........----这样好复杂了,其实没有必要!--例如:从 '2009-08-04' 到 '2009-10-20'select datediff(day,'2009-08-04','2009-10-20');--相距77天-- 而'2009-08-01' 到 '2009-10-31' --共3个月, 92天--相距92天select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0; ---再77/(平均每月的天数)select 77/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0); --例如:从 '2009-08-04' 到 '2009-10-20'select datediff(day,'2009-08-04','2009-10-20')+1;--相距78天-- 而'2009-08-01' 到 '2009-10-31' --共3个月, 92天--相距92天select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0; ---再78/(平均每月的天数)select 78/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0); left join 如何使b表中的null值变成指定值? 什么叫rowguidcol,及作用? case then 写入的格式问题 ◆◆◆看看这个统计的SQL怎么写啊,说说思路也好◆◆◆ 问个建表、效率方面的问题。谢谢! 请教如何统计各级分类,强人进 如何实现Oracel复制数据到SQL SERVER 请教个问题,急! 关于Sql设置的小问题 SQL server 2000 与Access 2000通过internet同步数据,请大家帮我提个方案 sql server表数据如何导入到mysql中?? SQL语句求助。
晕 你用between ...and 就OK了 包含边界值
其实按你的想法,直接写datediff(mm,'20091001','20091120')=1就可以了,再加上个dateadd来判断一下,是否满足一个月就好了。
这样写就行了
LTRIM(datediff(MM,'20091001','20091120'))+'月'
+LTRIM(DATEDIFF(DD,DATEADD(MM,datediff(MM,'20091001','20091120'),'20091001'),'20091120'))+'天'
/*
----------------------------
1月19天(所影响的行数为 1 行)*/
这样写,你判断一下就知道了,如果后面天数差>0则大于那个月
----也就是说:你的起始日期到终止日期,共几个月零几天,相差几个月,去相除,得到每月的平均天数,
----再...........----这样好复杂了,其实没有必要!--例如:从 '2009-08-04' 到 '2009-10-20'
select datediff(day,'2009-08-04','2009-10-20');
--相距77天-- 而'2009-08-01' 到 '2009-10-31' --共3个月, 92天
--相距92天
select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0; ---再77/(平均每月的天数)
select 77/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0);
select datediff(day,'2009-08-04','2009-10-20')+1;
--相距78天-- 而'2009-08-01' 到 '2009-10-31' --共3个月, 92天
--相距92天
select datediff(day,'2009-08-01','2009-10-31')+1;select (datediff(day,'2009-08-01','2009-10-31')+1)/3.0; ---再78/(平均每月的天数)
select 78/((datediff(day,'2009-08-01','2009-10-31')+1)/3.0);