`
lovnet
  • 浏览: 6754021 次
  • 性别: 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

分享到:
评论

相关推荐

    怎么计算Excel2021中当前日期所在的周数.docx

    Excel 2021 中计算当前日期所在的周数 在 Excel 2021 中,计算当前日期所在的周数可以使用 WEEKNUM 函数。WEEKNUM 函数的语法为 WEEKNUM(serial_number,[return_type]),其中 serial_number 代表日期,return_type ...

    ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例

    在实际应用中,日期函数的使用非常广泛,例如计算两个日期间的工作天数、获取当前月份的第一天和最后一天、计算日期所在的周数、弹出选择周的对话框等。 1. 计算两个日期间的工作天数 在实际应用中,我们需要计算...

    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)

    Java时间函数大全.pdf

    该方法将输入的日期字符串和星期几(1-7)传入,返回该日期所在周的对应星期几的日期。 ```java public static String getWeekDayDate(String sdate, int num) { // ... } ``` Java 时间格式大全 Java 时间函数...

    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...

    java.pt.pdf

    * 设计一个Employee类,包含姓名、年龄、部门、参加工作时间(日期型,精确到日)和基本薪水(basicSalary)这5个属性,包含一个计算总薪水(Salary)的方法(comSalary),该方法根据当前时间和其参加工作时间的...

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

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

    简易智力状态检查量表.pdf

    在时间定向力方面,该量表要求受试者回答今天的日期、季节、月份、日期和星期几,以评估他们对当前时间的认知能力。 在地点定向力方面,该量表要求受试者回答当前所在的国家、城市、城市的哪一部分、建筑物和楼层,...

    EXCEL函数公式集

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics