代码如下:
/* 统计两个时间相隔多少年、月、日、小时、分钟、秒钟 */
--查询多久前,返回值可能为:
-- 1分钟前,59分钟前
-- 1小时前,23小数前
-- 1天前,29天前
-- 1月前,11个月前
-- 1年前,10年前
CREATE FUNCTION HowLongTimesBefore ( @beginDateParam datetime, @endDateParam datetime ) Returns varchar(20)
AS
BEGIN
declare @returnString varchar(20)
declare @tempNum int
set @tempNum = datediff(year,@beginDateParam,@endDateParam)
if(@tempNum < 0)
return convert(varchar(20),abs(@tempNum)) + '年后';
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '年前';
/* 执行到这里,说明等于0或者等于1 */
if(@tempNum = 0)
begin
--同一年
set @tempNum = datediff(month,@beginDateParam,@endDateParam)
if(@tempNum < 0)
return convert(varchar(20),abs(@tempNum)) + '月后';
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '月前';
/* 执行到这里,说明等于0或者等于1 */
if(@tempNum = 0)
begin
--同月
set @tempNum = datediff(day,@beginDateParam,@endDateParam)
if(@tempNum < 0)
return convert(varchar(20),abs(@tempNum)) + '天后';
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '天前';
/* 执行到这里,说明等于0或者等于1 */
if(@tempNum = 0)
begin
--同天
set @tempNum = datediff(hour,@beginDateParam,@endDateParam)
if(@tempNum < 0)
return convert(varchar(20),abs(@tempNum)) + '小时后';
if(@tempNum > 1)
if(@tempNum >= 24)
return '1天前';
else
return convert(varchar(20),@tempNum) + '小时前';
/* 执行到这里,说明等于0或者等于1 */
if(@tempNum = 0)
begin
--同一个小时
set @tempNum = datediff(minute,@beginDateParam,@endDateParam)
if(@tempNum < 0)
return convert(varchar(20),abs(@tempNum)) + '分钟后';
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '分钟前';
/* 执行到这里,说明等于0或者等于1 */
set @tempNum = datediff(second,@beginDateParam,@endDateParam)
return convert(varchar(20),@tempNum) + '秒前';
end
else
begin
--跨小时
set @tempNum = datediff(minute,@beginDateParam,@endDateParam)
return convert(varchar(20),@tempNum) + '分钟前';
end
end
else
begin
--跨天
set @tempNum = datediff(hour,@beginDateParam,@endDateParam)
if(@tempNum >= 24)
return '1天前';
else
return convert(varchar(20),@tempNum) + '小时前';
end
end
else
begin
--跨月,相邻的两个月
set @tempNum = datediff(day,@beginDateParam,@endDateParam)
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '天前';
else
begin
--30号与1号,或者是31号与1号
set @tempNum = datediff(hour,@beginDateParam,@endDateParam)
if(@tempNum >= 24)
return '1天前';
else
return convert(varchar(20),@tempNum) + '小时前';
end
end
end
else
begin
--跨年
set @tempNum = datediff(month,@beginDateParam,@endDateParam)
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '月前';
/* 执行到这里,说明等于1 */
else
begin
--跨月,12月与1月
set @tempNum = datediff(day,@beginDateParam,@endDateParam)
if(@tempNum > 1)
return convert(varchar(20),@tempNum) + '天前';
else
begin
--相隔一条,说明是12月31号与1月1号
set @tempNum = datediff(hour,@beginDateParam,@endDateParam)
if(@tempNum >= 24)
return '1天前';
else
return convert(varchar(20),@tempNum) + '小时前';
end
end
end
return @returnString
END
go
--测试
select dbo.HowLongTimesBefore('2010-10-25 12:00:30','2010-10-25 12:02:00')
等待更新,转载请注明,谢谢!