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
SQL中获取最近的N个半年度的更多相关文章
- sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别
原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...
- Sql中获取表结构(字段名称,类型,长度,说明)
Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...
- Sql 中获取年月日时分秒的函数
getdate():获取系统当前时间 dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate()) ...
- SQL中获取排序分组后数据的脚本
废话不多说了,先上一段代码,如下所示: select distinct b.OrgID,b.CompanyID,b.AreaID,b.CustChannelID,b.CustID,b.SaleTo ...
- 从sql中获取表名
<dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser ...
- 在SQL SERVER中获取表中的第二条数据
在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...
- sql语句中获取datetime的日期部分或时间部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- sql语句中获取datetime任何部分
sql语句中获取datetime的日期部分 sql语句中 经常操作操作datetime类型数据.今天在写一个存储过程的时候需要将 一个datetime的值的 日期部分提取出来.网上有许多这方面的介绍. ...
- SSIS中Sql Task 获取系统变量
原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @var ...
随机推荐
- Hibernate中延迟加载和缓存
什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象 访问 ...
- SpringMVC核心——映射问题
一.SpringMVC 使用 RequestMapping 来解决映射问题. 二.在学习 RequestMapping 之前,首先来看一张图. 这张图表示的是发送一次 http 请求时,所包含的请求 ...
- 数论 - 素数的运用 --- poj 2689 : Prime Distance
Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12512 Accepted: 3340 D ...
- 数学 --- 高斯消元 POJ 1830
开关问题 Problem's Link: http://poj.org/problem?id=1830 Mean: 略 analyse: 增广矩阵:con[i][j]:若操作j,i的状态改变则con[ ...
- Winform开发框架之统计图表的实现
在前面的一些随笔中,介绍了不少我的Winform框架的特性,上篇随笔<Winform开发框架之通用高级查询模块>对其中的通用高级模块进了一个整理说明,本篇继续介绍Winform开发框架重要 ...
- Ext.NET 4.1.0 搭建页面布局
Ext.NET目前的最新版本为4.1.0,可以从官网:ext.net上下载,具体下载网址为:http://ext.net/download/. 文件下载下来后,在\lib\目录下存在3个文件夹,分别对 ...
- 使用VS开发C语言
在嵌入开发板上做了一段时间的C语言开发后,今天突然心血来潮,想起大学时期在TurboC和TC3下写代码的情形.大一时宿舍里有台386(在当时是算比较先进的了),大一大二基本上都在玩DOS和WIN31. ...
- 创业型互联网公司应该选择PHP, JavaEE还是.NET技术路线?
通常JavaEE和.NET被定义为构建大型在线系统,因为其支持面向对象设计,异步通讯,MVC等都相对比较完善,而PHP通常用于构建比较轻量的业务,例如SNS服务. 因为实施速度快,工程师社区规模大,开 ...
- Discuz!X3解读之类引入机制及目录结构
实例: - /source/class/table/table_forum_faq.php - /source/class/model/model_forum_post.php - /source/p ...
- js文件被浏览器缓存的思考
我们的用户量大,修改js文件后,用户反馈登录出现问题.实际上刷新一下就没事了.就是因为用户的浏览器使用的还是本地缓存的js代码. 强制刷新一般就会重新去服务器获取新的js代码.但不能让用户 ...