代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
MSSQL
】
SQL取出 所有周六 周日的日期
作者:
Dezai.CN
/ 发布于
2013/6/12
/
769
SQL取出 所有周六 周日的日期
reate 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 @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 **************************************************************************** /* 功能: 计算在某一段时间内某周几(如星期一)的所有日期 设计: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<=@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 /* ==============运行结果================*/ /* 每周的第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,date0+@@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
试试其它关键字
周六
周日
同语言下
.
SQL查询 多列合并成一行用逗号隔开
.
查看存储过程修改时间,最近执行时间
.
设置手动批量删除数据库相关进程
.
获取某个表中特定字段的所有字符串形式
.
SQL 如何去除重复的字符串
.
怎么去掉一个字段中的重复数据
.
String 去除空格 回车 换行 水平制表符
.
SQL查询和替换含有回车,空格,TAB
.
SQL SERVER 查询每日新增用户数量、次留数量
.
判断两个字符串是否存在相同的内容
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Dezai.CN
贡献的其它代码
(
4037
)
.
多线程Socket服务器模块
.
生成随机密码
.
清除浮动样式
.
弹出窗口居中
.
抓取url的函数
.
使用base HTTP验证
.
div模拟iframe嵌入效果
.
通过header转向的方法
.
Session操作类
.
执行sqlite输入插入操作后获得自动编号的ID
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3