SQL取出 所有周六 周日的日期

SQL取出 所有周六 周日的日期

create table SatSun([id] int identity(1,1),[date] datetime,[weekday] char(6))

go

declare @datetime datetime,@weekday char(6)

set @datetime=‘2007-1-1‘

while @datetime<=‘2007-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           2007-01-06 00:00:00.000                                星期六

2           2007-01-07 00:00:00.000                                星期天

3           2007-01-13 00:00:00.000                                星期六

4           2007-01-14 00:00:00.000                                星期天

5           2007-01-20 00:00:00.000                                星期六

6           2007-01-21 00:00:00.000                                星期天

7           2007-01-27 00:00:00.000                                星期六

8           2007-01-28 00:00:00.000                                星期天

9           2007-02-03 00:00:00.000                                星期六

……

100         2007-12-16 00:00:00.000                                星期天

101         2007-12-22 00:00:00.000                                星期六

102         2007-12-23 00:00:00.000                                星期天

103         2007-12-29 00:00:00.000                                星期六

104         2007-12-30 00:00:00.000                                星期天

*/(所影响的行数为 104 行)

****************************************************************************

declare @t table(dd datetime)

declare @d1 datetime

select @d1=‘2007-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=‘2007-1-1‘

Create table #a (Dat datetime)

while year(@d)=2007

begin

insert into #a values (@d )

set @[email protected]+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

****************************************************************************

/*

功能: 计算在某一段时间内某周几(如星期一)的所有日期

设计:OK_008

时间:2006-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<[email protected] AND @i<7)

SET @[email protected]@i

ELSE IF(@i<[email protected] AND @i=7)

SET @[email protected]@WeekDay

ELSE

SET @[email protected]@[email protected][email protected]

SET @Date=DATEADD(day,@i,@StartDate)

WHILE @Date<[email protected]

BEGIN

IF(@StartDate<[email protected]) PRINT CONVERT(nvarchar(10),@Date,121)

SET @Date=DATEADD(Week,1,@Date)

END

GO

/* ==============运行结果================*/

/*

每周的第1天设置@@DATEFIRST: 7

开始日期对应一周的第几天: 1

2006-01-01

2006-01-08

2006-01-15

2006-01-22

2006-01-29

..........

*/

select dateadd(day,x,col),‘星期二‘ from

(

select cast(‘2006-1-1‘ as datetime) as col

)a cross join

(

SELECT top 365 b8.i+b7.i + b6.i + b5.i + b4.i +b3.i +b2.i + b1.i + b0.i x

FROM(SELECT 0 i UNION ALL SELECT 1) b0

CROSS JOIN(SELECT 0 i UNION ALL SELECT 2) b1

CROSS JOIN(SELECT 0 i UNION ALL SELECT 4) b2

CROSS JOIN(SELECT 0 i UNION ALL SELECT 8) b3

CROSS JOIN(SELECT 0 i UNION ALL SELECT 16) b4

CROSS JOIN(SELECT 0 i UNION ALL SELECT 32) b5

CROSS JOIN(SELECT 0 i UNION ALL SELECT 64) b6

CROSS JOIN(SELECT 0 i UNION ALL SELECT 128) b7

CROSS JOIN(SELECT 0 i UNION ALL SELECT 256) b8

order by 1

)b

where datepart(dw,dateadd(day,x,col))=3 (这个地方改值换取其他日期)

2006-01-03 00:00:00.000                                星期二

2006-01-10 00:00:00.000                                星期二

2006-01-17 00:00:00.000                                星期二

2006-01-24 00:00:00.000                                星期二

2006-01-31 00:00:00.000                                星期二

****************************************************************************

DECLARE @t TABLE(date0 DATETIME)

DECLARE @st DATETIME,@et DATETIME

SET @st=‘2007-01-01‘

SET @et=‘2008-01-01‘

WHILE @st <@et

BEGIN

INSERT INTO @t VALUES(@st)

SELECT @st=DATEADD(DAY,1,@st)

END

SELECT date0,DATENAME(weekday,date0) FROM @t WHERE DATEPART(weekday,[email protected]@DATEFIRST-1) IN (6,7)

****************************************************************************

由于工作需要,在SQL Server 2005 下面写了一个计算两个日期之间相差工作日的函数。函数是以一个星期5天工作日计算,没有剔除五一国庆等假期。代码如下:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:  Sinmen

-- Create date: 2007-11-01

-- Description: 计算两个日期之间相差的工作日

-- =============================================

ALTER FUNCTION [dbo].[WorkDatediff]

(

@begin_date datetime,

@end_date datetime

)

RETURNS int

AS

BEGIN

DECLARE @return_date_quantity int

DECLARE @temp datetime

DECLARE @week_quantity int

DECLARE @day_quantity int

DECLARE @begin_day_of_week int

DECLARE @end_day_of_week int

DECLARE @add_begin_day_quantity int

DECLARE @add_end_day_quantity int

set @day_quantity = Datediff(d,@begin_date,@end_date)

--判断传入的开始日期是否比结束日期大

if @day_quantity < 0

begin

set @temp = @begin_date

set @begin_date = @end_date

set @end_date = @temp

end

set @week_quantity = Abs(Datediff(ww,@begin_date,@end_date)) - 1

if @week_quantity < 0

set @week_quantity = 0

set @begin_day_of_week = Datepart(dw,@begin_date) - 1

set @end_day_of_week = Datepart(dw,@end_date) - 1

set @add_begin_day_quantity = case

when @begin_day_of_week > 5 then 0

else 6 - @begin_day_of_week --(5 - @begin_day_of_week + 1)

end

set @add_end_day_quantity = case

when abs(@day_quantity) < 8  then 0

when @end_day_of_week > 5 then 5

else @end_day_of_week

end

if @day_quantity = 0

set @return_date_quantity = 0

else

set @return_date_quantity = @week_quantity * 5 + @add_begin_day_quantity + @add_end_day_quantity

if @day_quantity < 0

set @return_date_quantity = @return_date_quantity * -1

RETURN @return_date_quantity

END

GO

SET ANSI_NULLS OFF

GO

SET QUOTED_IDENTIFIER OFF

GO

时间: 2024-10-16 03:42:45

SQL取出 所有周六 周日的日期的相关文章

SQL Server中使用convert进行日期转换

SQL Server中使用convert进行日期转换 一般存入数据库中的时间格式为yyyy-mm-ddhh:mm:ss 如果要转换为yyyy-mm-dd  短日期格式.可以使用convert函数.下面是sqlserver帮助中关于convert函数的声明: 使用 CONVERT: CONVERT (data_type[(length)],expression[,style]) 参数 expression 是任何有效的 Microsoft® SQL Server™ 表达式.data_type 目标

周六周日为休息日的工厂日历修改变成工作日

declare @a int,@Finterid int, @Fdayid int select @Finterid=max(Finterid), @Fdayid=max(Fdayid) from t_MutiWorkCal --select Fdayid,FWeekID, FMonthID, FYearID, FCalID, FPreID, FNxtID, * from t_MutiWorkCal set @a=0 while(@a<1*365) begin insert into t_Mut

C#获取周一、周日的日期,月初,月末,季度第一天,季度最后一天

DateTime dt = DateTime.Now;  //当前时间 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d")));  //本周周一 DateTime endWeek = startWeek.AddDays(6);  //本周周日 DateTime startMonth = dt.AddDays(1 - dt.Day);  //本月月初 DateTime endMont

JEECG 深度使用培训班 周六周日公开课(一期班)

广大技术爱好者: 大家好!非常感谢大家一如既往的支持jeecg,jeecg现在用户越来多,社区的支持压力也越来越大! 为了社区更好的发展,也为了更好的支持网友遇到的问题,JEECG开源社区,特定期开展"JEECG深度使用培训班",培训周期为2个星期,开课时间为工作日晚上.周六.周日两天,空挡时间解答学员问题! 授课方式:YY视频群.QQ视频 培训费用    :500元 报名截止时间:20140515 讲师: scott \ 赵俊夫 说明:jeecg合作企业可以免费派2名学员参加; 报名

SQL Server使用convert对datetime日期数据进行获取

来源:http://database.51cto.com/art/201007/211883.htm 备注:本文的语法讲解确实是比较乱,似乎格式不太严谨.参考时还是以实例验证为准比较好 以下的文章主要描述的是SQL Server使用convert取得datetime日期数据的实际操作流程,在实际操作中用SQL Server数据库中用convert来获取datetime日期数据,以下实例包含各种日期格式的转换. 语句及查询结果: Select CONVERT(varchar(100), GETDA

sql取出某一列不重复数据的ID解决办法

取出某一列不重复数据的ID表A有ID,BID,ITime三列BID可能会有重复的现在要从A表根据ITime降序排序取出ID来,且如果BID重复就只取第一条数据的ID应该如何实现?------解决方案-------------------- 如果id是递增的select min(id),BID,max(date)from tbl group by BID sql取出某一列不重复数据的ID解决办法,布布扣,bubuko.com

Sql Server函数全解&lt;四&gt;日期和时间函数

原文:Sql Server函数全解<四>日期和时间函数   日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分.相同的,以time类型值为参数的函数,可以接受datetime类型的参数,但会忽略日期部分. 1.获取系统当前日期的函数getDate();  getDate()函数用于返回当前数据库系统的日期和时间,返回值的类型为datetime.[例]sel

C#获取周一、周日的日期 函数类

#region 得到一周的周一和周日的日期 /// <summary> /// 计算本周的周一日期 /// </summary> /// <returns></returns> public static DateTime GetMondayDate() { return GetMondayDate(DateTime.Now); } /// <summary> /// 计算本周周日的日期 /// </summary> /// <

(转)SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)

这是计算一个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0) --上个月的第一天 SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))  --当月的最后一天 SELECT DATEADD(ms,-3,DATEADD(mm, DATE