前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【T-SQL】获取指定日期的常用前后节点(月初月末周一周末等等)

【T-SQL】获取指定日期的常用前后节点(月初月末周一周末等等)

作者头像
AhDung
发布2018-09-13 11:36:48
8190
发布2018-09-13 11:36:48
举报
文章被收录于专栏:AhDungAhDungAhDung

注:周节点是根据中国习惯,视周一为起,周日为末。

/*---------------------------------
函数:获取某日期的特定起止日期v0.02
Author:AhDung
Update:201607251729。无论@@datefirst为何值,均不影响周节点
---------------------------------*/
ALTER FUNCTION dbo.FGetSpecialDate_ahdung(@date DATE, @SpcDate VARCHAR(20))
RETURNS DATE AS
BEGIN
IF @date IS    NULL RETURN NULL
IF @SpcDate IN ('YearBeg','YB','NC','年初') RETURN DATENAME(YEAR,@date)+'-01-01'
ELSE IF @SpcDate IN ('YearEnd','YE','NW','年尾','年末') RETURN DATENAME(YEAR,@date)+'-12-31'
ELSE IF @SpcDate IN ('QuarterBeg','QtBeg','QB','JC','季初') RETURN DATENAME(YEAR,@date)+CASE WHEN MONTH(@date)<=3 THEN '-01' WHEN MONTH(@date)<=6 THEN '-04' WHEN MONTH(@date)<=9 THEN '-07' ELSE '-10' END +'-01'
ELSE IF @SpcDate IN ('QuarterEnd','QtEnd','QE','JW','季尾','季末') RETURN DATENAME(YEAR,@date)+CASE WHEN MONTH(@date)<=3 THEN '-03-31' WHEN MONTH(@date)<=6 THEN '-06-30' WHEN MONTH(@date)<=9 THEN '-09-30' ELSE '-12-31' END
ELSE IF @SpcDate IN ('MonBeg','MB','YC','月初') RETURN CONVERT(CHAR(7),@date,120)+'-01'
ELSE IF @SpcDate IN ('MonEnd','ME','YW','月尾','月末') RETURN DATEADD(DAY,-1,CONVERT(CHAR(7),DATEADD(MONTH,1,@date),120)+'-01')
ELSE IF @SpcDate IN ('WeekBeg','WB','ZY','周一','WeekEnd','WE','ZR','ZM','周日','周末')
BEGIN
DECLARE @dw INT=DATEPART(dw,@date)
DECLARE @diff INT = 9-@@DATEFIRST
DECLARE @d INT= CASE WHEN @dw<@diff THEN @dw+7 ELSE @dw END
IF @SpcDate IN ('WeekBeg','WB','ZY','周一') RETURN DATEADD(DAY,@diff-@d,@date)
RETURN DATEADD(DAY,@diff-@d+6,@date)
END
RETURN @date
END
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档