通過SQL取出所有周六/周日的日期到Table
2010-05-24 16:31
375 查看
create table SatSun([id] int identity(1,1),[date] datetime,[weekday] char(6)) go declare @datetime datetime,@weekday char(6) set @datetime='2009-1-1' while @datetime<='2009-12-31' begin select @weekday=datename(weekday,@datetime) if @weekday= '星期六' insert SatSun([date],[weekday]) values(@datetime,@weekday) if @weekday='星期日' insert SatSun([date],[weekday]) values(@datetime,'星期天') select @datetime=dateadd(day,1,@datetime) end go select * from satsun drop table satsun /* id date weekday ----------- ------------------------------------------------------ ------- 1 2009-01-06 00:00:00.000 星期六 2 2009-01-07 00:00:00.000 星期天 3 2009-01-13 00:00:00.000 星期六 4 2009-01-14 00:00:00.000 星期天 5 2009-01-20 00:00:00.000 星期六 6 2009-01-21 00:00:00.000 星期天 7 2009-01-27 00:00:00.000 星期六 8 2009-01-28 00:00:00.000 星期天 9 2009-02-03 00:00:00.000 星期六 …… 100 2009-12-16 00:00:00.000 星期天 101 2009-12-22 00:00:00.000 星期六 102 2009-12-23 00:00:00.000 星期天 103 2009-12-29 00:00:00.000 星期六 104 2009-12-30 00:00:00.000 星期天 */(所影响的行数为 104 行) **************************************************************************** declare @t table(dd datetime) declare @d1 datetime select @d1='2009-1-1' while(year(@d1) <2008) begin insert into @t select @d1 set @d1=dateadd(dd,1,@d1) end select * from @t where datepart(weekday,dd)=6 or datepart(weekday,dd)=7 **************************************************************************** declare @i int declare @d datetime set @i=1 set @d='2009-1-1' Create table #a (Dat datetime) while year(@d)=2009 begin insert into #a values (@d ) set @i=@i+1 set @d=dateadd(day,1,@d) end select *,datepart(dw,Dat) as a from #a where datepart(dw,Dat) =1 or datepart(dw,Dat) =7 **************************************************************************** /* 功能: 计算在某一段时间内某周几(如星期一)的所有日期 设计:XXX 时间:2009-10 */ DECLARE @Date datetime DECLARE @StartDate datetime DECLARE @EndDate datetime DECLARE @WeekDay int DECLARE @i int SET DATEFIRST 7 --设置每周的第一天 SET @StartDate='2006-01-01' --统计的开始日期 SET @EndDate='2006-12-31' --统计的结束日期 SET @WeekDay=1 --根据实际的@@DATEFIRST而定,一般默认是7,如 @StartDate='2006-01-01'时候, @WeekDay=3表示星期二 SET @i=DATEPART(weekday,@StartDate) PRINT '每周的第1天设置@@DATEFIRST: '+CAST(@@DATEFIRST AS nvarchar(1)) PRINT '开始日期对应一周的第几天: '+CAST(@i AS nvarchar(1)) IF(@i<=@WeekDay AND @i<7) SET @i=@WeekDay-@i ELSE IF(@i<=@WeekDay AND @i=7) SET @i=@i-@WeekDay ELSE SET @i=@@DATEFIRST-@i+@WeekDay SET @Date=DATEADD(day,@i,@StartDate) WHILE @Date<=@EndDate BEGIN IF(@StartDate<=@Date) PRINT CONVERT(nvarchar(10),@Date,121) SET @Date=DATEADD(Week,1,@Date) END GO |
相关文章推荐
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- SQL取出 所有周六 周日的日期
- T-SQL查询两个日期之间的休息日(周六周日)天数
- SQL中在日期范围内判断星期几,把周六、周日的日期插入表
- SQL 计算两日期之间的工作天数和过滤工作日(周六、周日)
- 求一年中所有周六和周日的日期的方法
- sql 查出两个时间段内所有的工作日时间[去除周六周日]
- T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响
- SQL高级语法-RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
- PL/SQL表中date类型的字段用getString方法取出之后的格式化为日期的方法
- SQL查询--列出受雇日期早于直接上级的所有员工
- T-SQL循环打印一年中所有的日期(WHILE循环)
- sql查询查所有表名(table)
- SQL中给定某一日期段生成所有日期数据
- SQL计算两个日期之间的工作天数(除过周六日的天数)
- SQL 获取指定月份的所有日期,SQL日期分页