您的位置:首页 > 数据库

SQL: 判断给定日期是财政年度第几周的函数

2010-07-03 20:49 381 查看
近来单位有个水晶报表涉及到要把原来每个财政年度(上一年的6月1号开始到本年的6月30号截止为一个财政年度)按月显示的销售分析表换成按周显示,

于是便写了个函数引入到水晶报表数据源所用到的视图中调用,在此写下以备忘。

代码

CREATE FUNCTION [dbo].[WeekOfMonth](@Date DATETIME)
-- @Date 指定的日期
-- 返回 @Ret 此日期是它所在财政年度的第几周,周日是当周的最后一天
RETURNS integer
AS
BEGIN
DECLARE @Year int --取得财政年份
DECLARE @Month int --取得指定日期所在的月份
DECLARE @StWkNumber int --当年的6月1号是当年的第几周
DECLARE @StFinanceDate VARCHAR(10) --财政年度第一天,字符串类
DECLARE @FinanceStarDay DateTime --财政年度第一天,日期类
DECLARE @DayDiff int --取得指定两个日期之间所差的天数
DECLARE @FinanceStarMonday DateTime --财政年度第一天所在那一周周一的日期
DECLARE @Ret int --返回结果

SET @Year =DATEPART(year, @Date) --取得所在年份
SET @Month=DATEPART(month, @Date) --取得所在月份
SET @StFinanceDate= CAST(@Year AS varchar)+'-06-01'

---=======================第一种情况================================
IF (@Month>=6) --如果大于或等于6月,则此日期所在财政年度就在此日期的当年,其所在财政年度第几周直接从本年6月1号起始计算
BEGIN
SET @StWkNumber=DATEPART(WK, convert(datetime,@StFinanceDate,120)) --获取当年6月1号是当年的第几周
SET @Ret=DATEPART(WK, @DATE)-@StWkNumber +1 --计算出指定日期是所属财政年度的第几周
END

---=======================第二种情况================================
IF (@Month<6) --如果小于6月,则此日期所在财政年度起始月分是上一年的6月1号,此日期所在财政年度第几周需要从去年6月1号起始计算
BEGIN
SET @Year = @Year-1 --取得去年年份
SET @StFinanceDate= CAST(@Year AS varchar)+'-06-01' --组合成此日期所在财政年度的第一天时间
SET @FinanceStarDay=convert(datetime,@StFinanceDate,120) --把上面的日期字符串转换成DateTime类型

SET @FinanceStarMonday= DATEADD(wk, DATEDIFF(wk,0,@FinanceStarDay), 0) --取得去年6月1号所在那周的周一是当年几月几号
SET @DayDiff= DATEDIFF(day, convert(datetime,@FinanceStarMonday,120), @Date)+1 --获取这天与去年6月1号所在周的周一之间相差多少天,加1天表示包括当天在内
--分情况计算并返回第几周结果
IF @DayDiff % 7=0 SET @Ret=@DayDiff/7
IF @DayDiff % 7<>0 SET @Ret=@DayDiff/7+1
END
RETURN @Ret
END

如何调用:

DECLARE @DATE SMALLDATETIME
DECLARE @RET INT
SET @DATE= '2011-01-01'
SET @RET=dbo.WeekOfMonth(@DATE)
SELECT @RET
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: