如何用SQL计算两个日期差

skylarkzcc 2012-05-20 12:07:47
用SQL语句获得两个日期间的实际月份数。

如:
'2012-3-16' 到 '2012-04-17' 两个日期差是月份差是 = 1 ,用datediff函数 是没有问题的



'2012-3-16' 到 '2012-04-01' 两个日期差是月份差是 < 1 的

'2012-3-31' 到 '2012-04-30' 两个日期差是月份差是 < 1 还是=1 呢?

如何计算呢,盼解答,谢谢!


...全文
2031 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
十三门徒 2012-05-22
  • 打赏
  • 举报
回复
declare @date1 datetime,@date2 datetime
set @date1='2012-3-17'
set @date2='2012-04-01'
select case when datediff(day, @date1 ,@date2)>=datediff(day, @date1 ,(cast(year(@date1) as varchar(10))+'-'+ cast((month(@date1)+1) as varchar(10))+'-'+cast(day(@date1) as varchar(10)))) then cast(datediff(month, @date1 ,@date2) as float) else
cast(datediff(day, @date1 ,@date2) as float)/cast((
datediff(day, @date1 ,(cast(year(@date1) as varchar(10))+'-'+ cast((month(@date1)+1)
as varchar(10))+'-'+cast(day(@date1) as varchar(10))))) as float) end
skylarkzcc 2012-05-22
  • 打赏
  • 举报
回复
是的,但是如何实现 真正相差 一个月的时间呢
唐诗三百首 2012-05-20
  • 打赏
  • 举报
回复
datediff(m,[D1],[D2])是以2个日期所在的月份来计算相差月份数的.
simonxt 2012-05-20
  • 打赏
  • 举报
回复
-- datediff 对 month 比较的是简单的月数字差,和2个日期对应的相差天数无关
select datediff(month, '2012-3-16' ,'2012-04-01') -- 相差 1 月
select datediff(month, '2012-3-31' ,'2012-04-30') -- 相差 1 月
-- datediff 以 day 的方式比较时是指相差的天数,如下
select datediff(day, '2012-3-16' ,'2012-04-01') -- 相差 16 天
select datediff(day, '2012-3-31' ,'2012-04-30') -- 相差 30 天
人生无悔 2012-05-20
  • 打赏
  • 举报
回复
datediff(month, 'date1' ,'date2')--只会比较date1和date2相差的年月,不会比较日期,也就是3.31和4.1都是差一个月的

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧