博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MS SQL Server Quarter Function
阅读量:7078 次
发布时间:2019-06-28

本文共 2027 字,大约阅读时间需要 6 分钟。

近段时间开发的ERP系统,需要涉及至季度的一些日期。在系统中,实现了三个函数。

 

获取某一天的所在季度的第一天:

SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
--
 =============================================
--
 Author:         Insus.NET
--
 Create date:    2012-08-24
--
 Description:    获取某一天所在季度的第一天。
--
 =============================================
CREATE 
FUNCTION 
[
dbo
].
[
udf_FirstDayOfQuarter
] 
(
     
@Date 
DATETIME
 )
RETURNS 
DATETIME
BEGIN    
RETURN 
CAST(
YEAR(
@Date
AS 
VARCHAR(
4)) 
+ 
CASE 
WHEN 
MONTH(
@Date
IN ( 
1,  
2,  
3
THEN 
'
-01-01
'
                                              
WHEN 
MONTH(
@Date
IN ( 
4,  
5,  
6
THEN 
'
-04-01
'
                                              
WHEN 
MONTH(
@Date
IN ( 
7,  
8,  
9
THEN 
'
-07-01
'
                                              
WHEN 
MONTH(
@Date
IN (
10
11
12
THEN 
'
-10-01
'
END
END

 

获取某一天所在季度的最后一天:

SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
--
 =============================================
--
 Author:         Insus.NET
--
 Create date:    2012-08-24
--
 Description:    获取某一天所在季度的最后一天。
--
 =============================================
CREATE 
FUNCTION 
[
dbo
].
[
udf_LastDayOfQuarter
] 
(
     
@Date 
DATETIME
 )
RETURNS 
DATETIME
BEGIN    
RETURN 
CAST(
YEAR(
@Date
AS 
VARCHAR(
4)) 
+ 
CASE 
WHEN 
MONTH(
@Date
IN ( 
1,  
2,  
3
THEN 
'
-03-31
'
                                              
WHEN 
MONTH(
@Date
IN ( 
4,  
5,  
6
THEN 
'
-06-30
'
                                              
WHEN 
MONTH(
@Date
IN ( 
7,  
8,  
9
THEN 
'
-09-30
'
                                              
WHEN 
MONTH(
@Date
IN (
10
11
12
THEN 
'
-12-31
'
END
END

 

 季度函数:

SET ANSI_NULLS 
ON
GO
SET QUOTED_IDENTIFIER 
ON
GO
--
 =============================================
--
 Author:         Insus.NET
--
 Create date:    2012-08-24
--
 Description:    季度函数。
--
 =============================================
ALTER 
FUNCTION 
[
dbo
].
[
udf_Quarter
]
   
@Year 
INT
)
RETURNS 
@t 
TABLE (
[
Quarter
] 
TINYINT,
[
FirstDate
] 
DATETIME,
[
LastDate
] 
DATETIME)
BEGIN
INSERT 
INTO 
@t (
[
Quarter
],
[
FirstDate
],
[
LastDate
]
VALUES (
1
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-01-01
',
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-03-31
'),
                                                         (
2
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-04-01
',
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-06-30
'),
                                                         (
3
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-07-01
',
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-09-30
'),
                                                         (
4
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-10-01
',
CAST(
@Year 
AS 
VARCHAR(
4)) 
+ 
'
-12-31
')
RETURN 
END

 

 

 

转载地址:http://yzvml.baihongyu.com/

你可能感兴趣的文章
单元测试利器Mockito框架
查看>>
[译]使用MVI打造响应式APP(一):到底是什么Model
查看>>
java反射
查看>>
Heap(堆结构/优先队列)-Swift实现
查看>>
Android消息机制Handler
查看>>
静/动态库的简单制作
查看>>
图片加载之AFNetwork(上)
查看>>
ACID之I:事务隔离
查看>>
iOS核心动画高级技术(十四) 图像IO
查看>>
换个姿势学数学:广义二次函数的致命魔术
查看>>
怎样用MP3转换器转换音频格式
查看>>
TypeScript--es5中的类,继承,静态方法
查看>>
单页面路由工程使用微信分享及二次分享解决方案
查看>>
RESTful API 中的 Status code 是否要遵守规范
查看>>
Redis中的lru算法实现
查看>>
从手忙脚乱到袖手旁观:RPA对财务流程的颠覆
查看>>
Ant Design源码分析(三):Wave组件
查看>>
91. Decode Ways
查看>>
宜信 | 供应链金融+区块链双链合璧
查看>>
JS每日一题: 请简述一下vuex实现原理
查看>>