求两个时间的时间间隔!要求显示格式:1年1月1日1小时1分1秒

loulanlouzhu 2004-04-03 08:52:21
如果为0就不显示!

比如:0年0月1日1小时1分1秒
就显示为1日1小时1分1秒
...全文
74 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2004-04-03
  • 打赏
  • 举报
回复
天当然可以. 月+年不行.
quansui 2004-04-03
  • 打赏
  • 举报
回复
楼上大哥,可不可以返回的小时除24取整来判断天啊。
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
嗯!年月的确不好算!

除非假定一年365天一月30天!, 不过似乎意义不大!

我依样画葫芦,加了个天上去,不知道对不对!


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_datediff]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_datediff]
GO

--日期相减的函数,得到两个日期相减的时分秒
create function f_datediff(
@dt1 datetime,
@dt2 datetime
)returns varchar(50)
as
begin
declare @d int,@h int,@m int,@s int
select @d = datediff(second,@dt1,@dt2)/(24*60*60),
@h=datediff(second,@dt1,@dt2)%(24*60*60)/3600
,@m=(datediff(second,@dt1,@dt2)%3600)/60
,@s=(datediff(second,@dt1,@dt2)%3600)%60
return(case @d when 0 then
case @h when 0 then
case @m when 0 then
case @s when 0 then '' else cast(@s as varchar)+'秒' end
else cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
else cast(@h as varchar)+'时'+cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
else cast(@d as varchar)+'天'+cast(@h as varchar)+'时'+cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
)
end
go
zjcxc 2004-04-03
  • 打赏
  • 举报
回复
年月日没得想.

你怎么计算是相差了一年?
相差了几个月?
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
本打算在程序中处理了!

嗬嗬!

谢谢!

不如再想想,能把年月日也一起加进来!
zjcxc 2004-04-03
  • 打赏
  • 举报
回复
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_datediff]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_datediff]
GO

--日期相减的函数,得到两个日期相减的时分秒
create function f_datediff(
@dt1 datetime,
@dt2 datetime
)returns varchar(50)
as
begin
declare @h int,@m int,@s int
select @h=datediff(second,@dt1,@dt2)/3600
,@m=(datediff(second,@dt1,@dt2)%3600)/60
,@s=(datediff(second,@dt1,@dt2)%3600)%60
return(case @h when 0 then
case @m when 0 then
case @s when 0 then '' else cast(@s as varchar)+'秒' end
else cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
else cast(@h as varchar)+'时'+cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
)
end
go

--调用测试
select dbo.f_datediff('2003-01-01 10:28:18','2003-01-02 9:23:31')
go

/*--测试结果
--------------------------------------------------
22时55分13秒

(所影响的行数为 1 行)
--*/
zjcxc 2004-04-03
  • 打赏
  • 举报
回复
--别急,刚想出来

--相减的函数
create function f_datediff(
@dt1 datetime,
@dt2 datetime
)returns varchar(50)
as
begin
declare @h int,@m int,@s int
select @h=datediff(second,@dt1,@dt2)/3600
,@m=(datediff(second,@dt1,@dt2)%3600)/60
,@s=(datediff(second,@dt1,@dt2)%3600)%60
return(case @h when 0 then
case @m when 0 then
case @s when 0 then '' else cast(@s as varchar)+'秒' end
else cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
else cast(@h as varchar)+'时'+cast(@m as varchar)+'分'+cast(@s as varchar)+'秒' end
)
end
go
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
看来又得散分了!
jiangchuandong 2004-04-03
  • 打赏
  • 举报
回复
是不是case when是convert?
选择真是头痛
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
就时分秒就行,不过也要遵循那样的规则!


即如果小时的差值为零的话就不算,显示几分几秒!

如果分也为零就显示秒!
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
日也可以不算!
loulanlouzhu 2004-04-03
  • 打赏
  • 举报
回复
年月可以不算~!
zjcxc 2004-04-03
  • 打赏
  • 举报
回复
那年份不够减怎么算? 一年算365天还是366天? 一个月算31还是30天?

22,209

社区成员

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

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