SQL中获取最近的N个半年度
直接上代码:
--获取往前推的N个半年度 CREATE FUNCTION F3_GetRecentNHalfYear ( @N INT ) RETURNS @Result TABLE ( Year SMALLINT, HalfYear TINYINT, DateName VARCHAR(200) ) AS BEGIN IF @N <1 BEGIN RETURN END DECLARE @Now DATETIME, @StartHalfYear TINYINT, --从上半年还是下半年开始 @I INT SET @Now = GETDATE() SET @I = 1 IF(MONTH(@Now)<=6) SET @StartHalfYear = 1 ELSE SET @StartHalfYear = 2 WHILE @I <= @N BEGIN --如果当前是上半年,那么就是从1开始的,最近的N个年度是这样的: 2015 2014 2014 2013 2013 2012 --而它们与当前日期@Now呈现这样的数列: -0, -1, -0, -1, -0, -1 ..... --如果当前是下半年,那么就是从2开始的,最近的N个年度是这样的: 2015 2015 2014 2014 2013 2013 2012 --而它们与当前日期@Now呈现这样的数列: -0, -0, -1, -0, -1, -0,..... IF @StartHalfYear = 2 BEGIN IF @I >2 AND @I % 2 != 0 BEGIN SET @Now = DATEADD(yyyy,-1,@Now) END END ELSE BEGIN IF @I % 2 = 0 BEGIN SET @Now = DATEADD(yyyy,-1,@Now) END END --如果当前是上半年,那么就是从1开始的,最近的N个半年度呈现这样的数列: 1 2 1 2 1 2 1 2 --如果当前是下半年,那么就是从2开始的,最近的N个半年度呈现这样的数列: 2 1 2 1 2 1 2 1 --那么通项公式分别是:(3+POWER(-1,@I))/2 和 (3+POWER(-1,@I+1))/2 INSERT INTO @Result (Year,HalfYear) SELECT YEAR(@Now),(3+POWER(-1,@I+(@StartHalfYear-1)))/2 SET @I = @I + 1 END UPDATE @Result SET DateName = CAST(Year AS VARCHAR(4))+'年' + ( CASE WHEN HalfYear=1 THEN '上半年' ELSE '下半年' END ) RETURN END
<h3>
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端