`
lovnet
  • 浏览: 6721927 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

计算当前日期所在星期内的所有日期

阅读更多

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdate]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdate]
GO

/*--生成日期列表

生成指定年份的工作日/休息日列表

--邹建 2003.12(引用请保留此信息)--
*/

/*--调用示例

--查询 2003 年的工作日列表
SELECT * FROM dbo.f_getdate(2003,0)

--查询 2003 年的休息日列表
SELECT * FROM dbo.f_getdate(2003,1)

--查询 2003 年全部日期列表
SELECT * FROM dbo.f_getdate(2003,NULL)
--
*/
CREATE FUNCTION dbo.f_getdate(
@year int, --要查询的年份
@bz bit --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期
)RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3))
AS
BEGIN
DECLARE @tb TABLE(ID int IDENTITY(0,1),Date datetime)
INSERT INTO @tb(Date) SELECT TOP 366 DATEADD(Year,@YEAR-1900,'1900-1-1')
FROM sysobjects a ,sysobjects b
UPDATE @tb SET Date=DATEADD(DAY,id,Date)
DELETE FROM @tb WHERE Date>DATEADD(Year,@YEAR-1900,'1900-12-31')

IF @bz=0
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM @tb
WHERE (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 BETWEEN 1 AND 5
ELSE IF @bz=1
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM @tb
WHERE (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 IN (0,6)
ELSE
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM @tb

RETURN
END
GO


/*====================================================================*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getdate]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_getdate]
GO

/*--生成列表

生成指定日期段的日期列表

--邹建 2005.03(引用请保留此信息)--
*/

/*--调用示例

--查询工作日
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',0)

--查询休息日
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',1)

--查询全部日期
SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',NULL)
--
*/

CREATE FUNCTION dbo.f_getdate(
@begin_date Datetime, --要查询的开始日期
@end_date Datetime, --要查询的结束日期
@bz bit --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期
)RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3))
AS
BEGIN
DECLARE @tb TABLE(ID int IDENTITY(0,1),a bit)
INSERT INTO @tb(a) SELECT TOP 366 0
FROM sysobjects a ,sysobjects b

IF @bz=0
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a
WHERE Date<=@end_date
AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 BETWEEN 1 AND 5
SET @begin_date=DATEADD(Day,366,@begin_date)
END
ELSE IF @bz=1
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a
WHERE Date<=@end_date
AND (DATEPART(Weekday,Date)+@@DATEFIRST-1)%7 in(0,6)
SET @begin_date=DATEADD(Day,366,@begin_date)
END
ELSE
WHILE @begin_date<=@end_date
BEGIN
INSERT INTO @re(Date,Weekday)
SELECT Date,DATENAME(Weekday,Date)
FROM(
SELECT Date=DATEADD(Day,ID,@begin_date)
FROM @tb
)a
WHERE Date<=@end_date
SET @begin_date=DATEADD(Day,366,@begin_date)
END

RETURN
END
GO

分享到:
评论

相关推荐

    java 日期转化计算

    计算当前第几周,星期几,日期格式化,得到某年某月的日期,取得当前日期所在周的第几天

    有关日期函数 生肖、天干地支

    当前日期所在星期数 integer(daysafter(date(year(ad_date), 1, 1), ad_date)/7) + 1 + integer((daynumber(date(year(ad_date), 1, 1)) + mod(daysafter(date(year(ad_date), 1, 1), ad_date), 7) -1)/7)

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    3.3.4 WEEKDAY——返回当前日期是星期几 130 3.3.5 HOUR——返回小时数 131 3.3.6 MINUTE——返回分钟数 131 3.3.7 SECOND——返回秒数 132 3.4 文本与日期、时间格式间的转换 133 3.4.1 DATEVALUE——将文本...

    Excel函数活用范例大辞典(全新版).何先军.2015-2(带书签高清文字版).pdf

    001 计算所有生产线的总产量 30 002 计算签单总额在300000元以上的总金额 32 003 计算销售部当月的实发工资总和 34 004 计算销售量排前三的商品总销量 36 005 高斯求和 38 006 汇总女装订单表中已收到的...

    程序员的SQL金典6-8

     11.7.4 计算销售单制单日期所在月份的第一天和最后一天  11.8 结果集转置  11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS...

    程序员的SQL金典7-8

     11.7.4 计算销售单制单日期所在月份的第一天和最后一天  11.8 结果集转置  11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS...

    程序员的SQL金典4-8

     11.7.4 计算销售单制单日期所在月份的第一天和最后一天  11.8 结果集转置  11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS...

    程序员的SQL金典3-8

     11.7.4 计算销售单制单日期所在月份的第一天和最后一天  11.8 结果集转置  11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS...

    jdbc操作文档,数据库基本操作文档集合

    last_day(日期值):返回指定日期所在月份的最后一天 日期进行加减的一些规律: 日期-数字 = 日期 日期+数字 = 日期 日期-日期 = 数字(天数) 16.转换函数 (1).to_char:转换成字符串 a. 日期转换....................

    程序员的SQL金典.rar

     11.7.4 计算销售单制单日期所在月份的第一天和最后一天  11.8 结果集转置  11.8.1 将结果集转置为一行  11.8.2 把结果集转置为多行  11.9 递归查询  11.9.1 Oracle中的CONNECT BY子句  11.9.2 Oracle中的SYS...

    我整理的VBA 自定义函数大全 共138页

    17.计算日期差,除去星期六、星期日 18.将英文字反转的自定函数 19.计算个人所得税 20.一个能计算是否有重复单元的函数 21.数字金额转中文大写 22.将数字转成英文 23.人民币大小写转换 24.获取区域颜色值 25.获取...

    EXCEL函数公式集

    如何在单元格中自动填入当前日期 如何判断某日是否星期天 某个日期是星期几 什么函数可以显示当前星期 求本月天数 显示昨天的日期 关于取日期 如何对日期进行上、中、下旬区分 如何获取一个月的最大天数 日期格式...

    Excel公式大全操作应用实例(史上最全)

    如何在单元格中自动填入当前日期 如何判断某日是否星期天 某个日期是星期几 什么函数可以显示当前星期 求本月天数 显示昨天的日期 关于取日期 如何对日期进行上、中、下旬区分 如何获取一个月的最大天数 日期格式...

    java时间格式大全(算法源码)

    // 计算当月最后一天,返回字符串 public String getDefaultDay(){ String str = ""; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar lastDate = Calendar.getInstance(); lastDate.set...

    C#编程经验技巧宝典

    76 &lt;br&gt;0111 计算字符串中子字符串出现的次数 76 &lt;br&gt;0112 获得字符串中大写字母的个数 77 &lt;br&gt;0113 获得某字符在字符串中最后出现的位置 78 &lt;br&gt;0114 如何找出字符串中某一字符的所有位置 78...

    明日科技C#开发入门及项目实战

    实例012 判断当前系统日期是星期几 实例013 定义局部变量输出不同的字段 实例014 定义循环内部变量并输出变量的值 实例015 定义常量计算圆的周长 实例016 使用“+”编写双重意义的表达式 实例017 使用小括号括起来的...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例012 判断当前系统日期是星期几 17 实例013 定义局部变量输出不同的字段 19 实例014 定义循环内部变量并输出变量的值 20 实例015 定义常量计算圆的周长 21 实例016 使用“+”编写双重意义的表达式 22 实例017 ...

Global site tag (gtag.js) - Google Analytics