• 统计两个时间相隔多少年、月、日、小时、分钟、秒钟(原创)


    代码如下:

    /* 统计两个时间相隔多少年、月、日、小时、分钟、秒钟 */
    
    
    
    --查询多久前,返回值可能为:
    -- 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')
    

    等待更新,转载请注明,谢谢!

  • 相关阅读:
    Spring注解(环境)
    Spring注解(赋值相关)
    C#:关联程序和文件
    C#: 获取执行程序所在路径和启动资源管理器
    C#:WPF绘制问题
    WPF:窗体置顶
    C#:屏幕显示区域问题
    C#:文件、文件夹特别操作
    C#:插件、框架
    WPF:MenuItem样式
  • 原文地址:https://www.cnblogs.com/Music/p/SQLHowLongTimesBefore.html
Copyright © 2020-2023  润新知