SQL-Server-SQL語(yǔ)句大全_第1頁(yè)
SQL-Server-SQL語(yǔ)句大全_第2頁(yè)
SQL-Server-SQL語(yǔ)句大全_第3頁(yè)
SQL-Server-SQL語(yǔ)句大全_第4頁(yè)
SQL-Server-SQL語(yǔ)句大全_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、設(shè)置內(nèi)存選項(xiàng):SQL code -設(shè)置 min server memory 配置項(xiàng)EXEC sp_configure N'min server memory (MB)', 0-設(shè)置 max server memory 配置項(xiàng)EXEC sp_configure N'max server memory (MB)', 256-使更新生效RECONFIGURE WITH OVERRIDE使用文件及文件組.sql: SQL code /*-功能說(shuō)明 下面的代碼是在SQL Server 2000上創(chuàng)建名為 MyDB 的數(shù)據(jù)庫(kù) 該數(shù)據(jù)庫(kù)包括1個(gè)主要數(shù)據(jù)文件、3個(gè)用戶(hù)定義的文件

2、組和1個(gè)日志文件 ALTER DATABASE語(yǔ)句將用戶(hù)定義文件組指定為默認(rèn)文件組。 之后,通過(guò)指默認(rèn)的文件組來(lái)創(chuàng)建表,并且將圖像數(shù)據(jù)和索引放到指定的文件組中。 最后,將文件組中的指定數(shù)據(jù)文件刪除-*/-切換到 master 數(shù)據(jù)庫(kù)USE masterGO-A. 創(chuàng)建數(shù)據(jù)庫(kù) MyDBCREATE DATABASE MyDBON PRIMARY -主文件組和主要數(shù)據(jù)文件 ( NAME='MyDB_Primary', FILENAME= 'c:MyDB_Prm.mdf'),FILEGROUP MyDB_FG1 -用戶(hù)定義文件組1 ( NAME = 'MyDB

3、_FG1_Dat1', FILENAME = 'c:MyDB_FG1_1.ndf'), -次要數(shù)據(jù)文件1 ( NAME = 'MyDB_FG1_Dat2', FILENAME = 'd:MyDB_FG1_2.ndf'), -次要數(shù)據(jù)文件2FILEGROUP MyDB_FG2 -用戶(hù)定義文件組2 ( NAME = 'MyDB_FG1_Dat', FILENAME = 'e:MyDB_FG2.ndf') -次要數(shù)據(jù)文件LOG ON -日志文件 ( NAME='MyDB_log', FILENAM

4、E ='d:MyDB.ldf')GO-B. 修改默認(rèn)數(shù)據(jù)文件組ALTER DATABASE MyDB MODIFY FILEGROUP MyDB_FG1 DEFAULTGO-切換到新建的數(shù)據(jù)庫(kù) MyDBUSE MyDB-C. 在默認(rèn)文件組MyDB_FG1創(chuàng)建表,并且指定圖像數(shù)據(jù)保存在用戶(hù)定義文件組MMyDB_FG2CREATE TABLE MyTable ( cola int PRIMARY KEY , colb char(8) , colc image ) TEXTIMAGE_ON MyDB_FG2-在用戶(hù)定義文件組MyDB_FG2上創(chuàng)建索引CREATE INDEX IX_M

5、yTable ON MyTable(cola) ON MyDB_FG2GO-D. 將要?jiǎng)h除數(shù)據(jù)文件MyDB_FG1_Dat1上的數(shù)據(jù)轉(zhuǎn)移到其他數(shù)據(jù)文件中,并且清空數(shù)據(jù)文件MyDB_FG1_Dat1DBCC SHRINKFILE(MyDB_FG1_Dat1,EMPTYFILE)-刪除數(shù)據(jù)文件MyDB_FG1_Dat1ALTER DATABASE MyDB REMOVE FILE MyDB_FG1_Dat1調(diào)整tempdb數(shù)據(jù)庫(kù)的文件屬性.sql: SQL code -A. 將tempdb數(shù)據(jù)庫(kù)的主數(shù)據(jù)文件大小設(shè)置為10MB。ALTER DATABASE tempdbMODIFY FILE( na

6、me=tempdev, size=100 MB)GO-B. 將tempdb數(shù)據(jù)庫(kù)的主數(shù)據(jù)文件移動(dòng)到指定的磁盤(pán)分區(qū)上,并且為其添加一個(gè)數(shù)據(jù)文件。-移動(dòng)主數(shù)據(jù)文件ALTER DATABASE tempdb MODIFY FILE ( NAME='tempdev', FILENAME ='d:tempdb.mdf')-添加次要數(shù)據(jù)文件ALTER DATABASE tempdb ADD FILE ( NAME='tempdata_1', FILENAME ='d:tempdb_data_1.ndf')日期概念理解中的一些測(cè)試.sql: S

7、QL code -A. 測(cè)試 datetime 精度問(wèn)題DECLARE t TABLE(date char(21)INSERT t SELECT '1900-1-1 00:00:00.000'INSERT t SELECT '1900-1-1 00:00:00.001'INSERT t SELECT '1900-1-1 00:00:00.009'INSERT t SELECT '1900-1-1 00:00:00.002'INSERT t SELECT '1900-1-1 00:00:00.003'INSERT t

8、 SELECT '1900-1-1 00:00:00.004'INSERT t SELECT '1900-1-1 00:00:00.005'INSERT t SELECT '1900-1-1 00:00:00.006'INSERT t SELECT '1900-1-1 00:00:00.007'INSERT t SELECT '1900-1-1 00:00:00.008'SELECT date,轉(zhuǎn)換后的日期=CAST(date as datetime) FROM t/*-結(jié)果date 轉(zhuǎn)換后的日期- -1900-1

9、-1 00:00:00.000 1900-01-01 00:00:00.0001900-1-1 00:00:00.001 1900-01-01 00:00:00.0001900-1-1 00:00:00.009 1900-01-01 00:00:00.0101900-1-1 00:00:00.002 1900-01-01 00:00:00.0031900-1-1 00:00:00.003 1900-01-01 00:00:00.0031900-1-1 00:00:00.004 1900-01-01 00:00:00.0031900-1-1 00:00:00.005 1900-01-01 00:

10、00:00.0071900-1-1 00:00:00.006 1900-01-01 00:00:00.0071900-1-1 00:00:00.007 1900-01-01 00:00:00.0071900-1-1 00:00:00.008 1900-01-01 00:00:00.007(所影響的行數(shù)為 10 行)-*/GO-B. 對(duì)于 datetime 類(lèi)型的純?nèi)掌诤蜁r(shí)間的十六進(jìn)制表示DECLARE dt datetime-單純的日期SET dt='1900-1-2'SELECT CAST(dt as binary(8)-結(jié)果: 0x0000000100000000-單純的時(shí)

11、間SET dt='00:00:01'SELECT CAST(dt as binary(8)-結(jié)果: 0x000000000000012CGO-C. 對(duì)于 smalldatetime 類(lèi)型的純?nèi)掌诤蜁r(shí)間的十六進(jìn)制表示DECLARE dt smalldatetime-單純的日期SET dt='1900-1-2'SELECT CAST(dt as binary(4)-結(jié)果: 0x00010000-單純的時(shí)間SET dt='00:10'SELECT CAST(dt as binary(4)-結(jié)果: 0x0000000ACONVERT在日期轉(zhuǎn)換中的使用示例

12、.sql: SQL code -字符轉(zhuǎn)換為日期時(shí),Style的使用-1. Style=101時(shí),表示日期字符串為:mm/dd/yyyy格式SELECT CONVERT(datetime,'11/1/2003',101)-結(jié)果:2003-11-01 00:00:00.000-2. Style=101時(shí),表示日期字符串為:dd/mm/yyyy格式SELECT CONVERT(datetime,'11/1/2003',103)-結(jié)果:2003-01-11 00:00:00.000/*= 日期轉(zhuǎn)換為字符串 =*/DECLARE dt datetimeSET dt=

13、9;2003-1-11'-1. Style=101時(shí),表示將日期轉(zhuǎn)換為:mm/dd/yyyy 格式SELECT CONVERT(varchar,dt,101)-結(jié)果:01/11/2003-2. Style=103時(shí),表示將日期轉(zhuǎn)換為:dd/mm/yyyy 格式SELECT CONVERT(varchar,dt,103)-結(jié)果:11/01/2003/*= 這是很多人經(jīng)常犯的錯(cuò)誤,對(duì)非日期型轉(zhuǎn)換使用日期的style樣式 =*/SELECT CONVERT(varchar,'2003-1-11',101)-結(jié)果:2003-1-11SET DATEFORMAT對(duì)日期處理的影響.

14、sql SQL code -1./*-說(shuō)明 SET DATEFORMAT設(shè)置對(duì)使用CONVERT把字符型日期轉(zhuǎn)換為日期的處理也具有影響 但不影響明確指定了style的CONVERT處理。-*/-示例 ,在下面的示例中,第一個(gè)CONVERT轉(zhuǎn)換未指定style,轉(zhuǎn)換的結(jié)果受SET DATAFORMAT的影響,第二個(gè)CONVERT轉(zhuǎn)換指定了style,轉(zhuǎn)換結(jié)果受style的影響。-設(shè)置輸入日期順序?yàn)?日/月/年SET DATEFORMAT DMY-不指定Style參數(shù)的CONVERT轉(zhuǎn)換將受到SET DATEFORMAT的影響SELECT CONVERT(datetime,'2-1-200

15、5')-結(jié)果: 2005-01-02 00:00:00.000-指定Style參數(shù)的CONVERT轉(zhuǎn)換不受SET DATEFORMAT的影響SELECT CONVERT(datetime,'2-1-2005',101)-結(jié)果: 2005-02-01 00:00:00.000GO-2./*-說(shuō)明 如果輸入的日期包含了世紀(jì)部分,則對(duì)日期進(jìn)行解釋處理時(shí) 年份的解釋不受SET DATEFORMAT設(shè)置的影響。-*/-示例,在下面的代碼中,同樣的SET DATEFORMAT設(shè)置,輸入日期的世紀(jì)部分與不輸入日期的世紀(jì)部分,解釋的日期結(jié)果不同。DECLARE dt datetime-

16、設(shè)置SET DATEFORMAT為:月日年SET DATEFORMAT MDY-輸入的日期中指定世紀(jì)部分SET dt='01-2002-03'SELECT dt-結(jié)果: 2002-01-03 00:00:00.000-輸入的日期中不指定世紀(jì)部分SET dt='01-02-03'SELECT dt-結(jié)果: 2003-01-02 00:00:00.000GO-3./*-說(shuō)明 如果輸入的日期不包含日期分隔符,那么SQL Server在對(duì)日期進(jìn)行解釋時(shí) 將忽略SET DATEFORMAT的設(shè)置。-*/-示例,在下面的代碼中,不包含日期分隔符的字符日期,在不同的SET D

17、ATEFORMAT設(shè)置下,其解釋的結(jié)果是一樣的。DECLARE dt datetime-設(shè)置SET DATEFORMAT為:月日年SET DATEFORMAT MDYSET dt='010203'SELECT dt-結(jié)果: 2001-02-03 00:00:00.000-設(shè)置SET DATEFORMAT為:日月年SET DATEFORMAT DMYSET dt='010203'SELECT dt-結(jié)果: 2001-02-03 00:00:00.000-輸入的日期中包含日期分隔符SET dt='01-02-03'SELECT dt-結(jié)果: 2003

18、-02-01 00:00:00.000SET LANGUAGE對(duì)日期處理的影響示例.sql SQL code -以下示例演示了在不同的語(yǔ)言環(huán)境(SET LANGUAGE)下,DATENAME與CONVERT函數(shù)的不同結(jié)果。USE master-設(shè)置會(huì)話的語(yǔ)言環(huán)境為: EnglishSET LANGUAGE N'English'SELECT DATENAME(Month,GETDATE() AS Month, DATENAME(Weekday,GETDATE() AS Weekday, CONVERT(varchar,GETDATE(),109) AS CONVERT/*-結(jié)果:

19、Month Weekday CONVERT- - -March Tuesday Mar 15 2005 8:59PM-*/-設(shè)置會(huì)話的語(yǔ)言環(huán)境為: 簡(jiǎn)體中文SET LANGUAGE N'簡(jiǎn)體中文'SELECT DATENAME(Month,GETDATE() AS Month, DATENAME(Weekday,GETDATE() AS Weekday, CONVERT(varchar,GETDATE(),109) AS CONVERT/*-結(jié)果Month Weekday CONVERT- - -05 星期四 05 19 2005 2:49:20:607PM-*/日期格式化處理

20、.sql SQL code DECLARE dt datetimeSET dt=GETDATE()-1短日期格式:yyyy-m-dSELECT REPLACE(CONVERT(varchar(10),dt,120),N'-0','-')-2長(zhǎng)日期格式:yyyy年mm月dd日 -A. 方法1 SELECT STUFF(STUFF(CONVERT(char(8),dt,112),5,0,N'年'),8,0,N'月')+N'日'-B. 方法2 SELECT DATENAME(Year,dt)+N'年'+D

21、ATENAME(Month,dt)+N'月'+DATENAME(Day,dt)+N'日'-3長(zhǎng)日期格式:yyyy年m月d日SELECT DATENAME(Year,dt)+N'年'+CAST(DATEPART(Month,dt) AS varchar)+N'月'+DATENAME(Day,dt)+N'日'-4.完整日期+時(shí)間格式:yyyy-mm-dd hh:mi:ss:mmmSELECT CONVERT(char(11),dt,120)+CONVERT(char(12),dt,114)日期推算處理.sql SQL

22、code DECLARE dt datetimeSET dt=GETDATE()DECLARE number intSET number=3-1指定日期該年的第一天或最后一天-A. 年的第一天SELECT CONVERT(char(5),dt,120)+'1-1'-B. 年的最后一天SELECT CONVERT(char(5),dt,120)+'12-31'-2指定日期所在季度的第一天或最后一天-A. 季度的第一天SELECT CONVERT(datetime, CONVERT(char(8), DATEADD(Month, DATEPART(Quarter,d

23、t)*3-Month(dt)-2, dt), 120)+'1')-B. 季度的最后一天(CASE判斷法)SELECT CONVERT(datetime, CONVERT(char(8), DATEADD(Month, DATEPART(Quarter,dt)*3-Month(dt), dt), 120) +CASE WHEN DATEPART(Quarter,dt) in(1,4) THEN '31'ELSE '30' END)-C. 季度的最后一天(直接推算法)SELECT DATEADD(Day,-1, CONVERT(char(8), DA

24、TEADD(Month, 1+DATEPART(Quarter,dt)*3-Month(dt), dt), 120)+'1')-3指定日期所在月份的第一天或最后一天-A. 月的第一天SELECT CONVERT(datetime,CONVERT(char(8),dt,120)+'1')-B. 月的最后一天SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,dt),120)+'1')-C. 月的最后一天(容易使用的錯(cuò)誤方法)SELECT DATEADD(Month,1,DATEADD(Day,

25、-DAY(dt),dt)-4指定日期所在周的任意一天SELECT DATEADD(Day,number-DATEPART(Weekday,dt),dt)-5指定日期所在周的任意星期幾-A. 星期天做為一周的第1天SELECT DATEADD(Day,number-(DATEPART(Weekday,dt)+DATEFIRST-1)%7,dt)-B. 星期一做為一周的第1天SELECT DATEADD(Day,number-(DATEPART(Weekday,dt)+DATEFIRST-2)%7-1,dt)特殊日期加減函數(shù).sql SQL code if exists (select * fro

26、m dbo.sysobjects where id = object_id(N'dbo.f_DateADD') and xtype in (N'FN', N'IF', N'TF') drop function dbo.f_DateADDGO/*-特殊日期加減函數(shù) 對(duì)于日期指定部分的加減,使用DATEADD函數(shù)就可以輕松實(shí)現(xiàn)。 在實(shí)際的處理中,還有一種比較另類(lèi)的日期加減處理 就是在指定的日期中,加上(或者減去)多個(gè)日期部分 比如將2005年3月11日,加上1年3個(gè)月11天2小時(shí)。 對(duì)于這種日期的加減處理,DATEADD函數(shù)的力量就顯

27、得有點(diǎn)不夠。 本函數(shù)實(shí)現(xiàn)這樣格式的日期字符串加減處理: y-m-d h:m:s.m | -y-m-d h:m:s.m 說(shuō)明: 要加減的日期字符輸入方式與日期字符串相同。日期與時(shí)間部分用空格分隔 最前面一個(gè)字符如果是減號(hào)(-)的話,表示做減法處理,否則做加法處理。 如果日期字符只包含數(shù)字,則視為日期字符中,僅包含天的信息。-*/*-調(diào)用示例 SELECT dbo.f_DateADD(GETDATE(),'11:10')-*/CREATE FUNCTION dbo.f_DateADD(Date datetime,DateStr varchar(23)RETURNS datetime

28、ASBEGIN DECLARE bz int,s varchar(12),i int IF DateStr IS NULL OR Date IS NULL OR(CHARINDEX('.',DateStr)>0 AND DateStr NOT LIKE '%:%:%.%') RETURN(NULL) IF DateStr='' RETURN(Date) SELECT bz=CASE WHEN LEFT(DateStr,1)='-' THEN -1 ELSE 1 END, DateStr=CASE WHEN LEFT(Date

29、,1)='-' THEN STUFF(RTRIM(LTRIM(DateStr),1,1,'') ELSE RTRIM(LTRIM(DateStr) END IF CHARINDEX(' ',DateStr)>1 OR CHARINDEX('-',DateStr)>1 OR(CHARINDEX('.',DateStr)=0 AND CHARINDEX(':',DateStr)=0) BEGIN SELECT i=CHARINDEX(' ',DateStr+' 

30、9;) ,s=REVERSE(LEFT(DateStr,i-1)+'-' ,DateStr=STUFF(DateStr,1,i,'') ,i=0 WHILE s>'' and i<3 SELECT Date=CASE i WHEN 0 THEN DATEADD(Day,bz*REVERSE(LEFT(s,CHARINDEX('-',s)-1),Date) WHEN 1 THEN DATEADD(Month,bz*REVERSE(LEFT(s,CHARINDEX('-',s)-1),Date) WHEN

31、2 THEN DATEADD(Year,bz*REVERSE(LEFT(s,CHARINDEX('-',s)-1),Date) END, s=STUFF(s,1,CHARINDEX('-',s),''), i=i+1 END IF DateStr>'' BEGIN IF CHARINDEX('.',DateStr)>0 SELECT Date=DATEADD(Millisecond ,bz*STUFF(DateStr,1,CHARINDEX('.',DateStr),''

32、), Date), DateStr=LEFT(DateStr,CHARINDEX('.',DateStr)-1)+':', i=0 ELSE SELECT DateStr=DateStr+':',i=0 WHILE DateStr>'' and i<3 SELECT Date=CASE i WHEN 0 THEN DATEADD(Hour,bz*LEFT(DateStr,CHARINDEX(':',DateStr)-1),Date) WHEN 1 THEN DATEADD(Minute,bz*LEFT(

33、DateStr,CHARINDEX(':',DateStr)-1),Date) WHEN 2 THEN DATEADD(Second,bz*LEFT(DateStr,CHARINDEX(':',DateStr)-1),Date) END, DateStr=STUFF(DateStr,1,CHARINDEX(':',DateStr),''), i=i+1 END RETURN(Date)ENDGO查詢(xún)指定日期段內(nèi)過(guò)生日的人員.sql SQL code -測(cè)試數(shù)據(jù)DECLARE t TABLE(ID int,Name varchar(

34、10),Birthday datetime)INSERT t SELECT 1,'aa','1999-01-01'UNION ALL SELECT 2,'bb','1996-02-29'UNION ALL SELECT 3,'bb','1934-03-01'UNION ALL SELECT 4,'bb','1966-04-01'UNION ALL SELECT 5,'bb','1997-05-01'UNION ALL SELECT 6,

35、'bb','1922-11-21'UNION ALL SELECT 7,'bb','1989-12-11'DECLARE dt1 datetime,dt2 datetime-查詢(xún) 2003-12-05 至 2004-02-28 生日的記錄SELECT dt1='2003-12-05',dt2='2004-02-28'SELECT * FROM tWHERE DATEADD(Year,DATEDIFF(Year,Birthday,dt1),Birthday) BETWEEN dt1 AND dt2 O

36、R DATEADD(Year,DATEDIFF(Year,Birthday,dt2),Birthday) BETWEEN dt1 AND dt2/*-結(jié)果ID Name Birthday- - -1 aa 1999-01-01 00:00:00.0007 bb 1989-12-11 00:00:00.000-*/-查詢(xún) 2003-12-05 至 2006-02-28 生日的記錄SET dt2='2006-02-28'SELECT * FROM tWHERE DATEADD(Year,DATEDIFF(Year,Birthday,dt1),Birthday) BETWEEN dt

37、1 AND dt2 OR DATEADD(Year,DATEDIFF(Year,Birthday,dt2),Birthday) BETWEEN dt1 AND dt2/*-查詢(xún)結(jié)果ID Name Birthday- - -1 aa 1999-01-01 00:00:00.0002 bb 1996-02-29 00:00:00.0007 bb 1989-12-11 00:00:00.000-*/生成日期列表的函數(shù).sql SQL code if exists (select * from dbo.sysobjects where id = object_id(N'dbo.f_getdat

38、e') and xtype in (N'FN', N'IF', N'TF')drop function dbo.f_getdateGO/*-生成日期列表 生成指定年份的工作日/休息日列表-鄒建 2003.12(引用請(qǐng)保留此信息)-*/*-調(diào)用示例 -查詢(xún) 2003 年的工作日列表 SELECT * FROM dbo.f_getdate(2003,0) -查詢(xún) 2003 年的休息日列表 SELECT * FROM dbo.f_getdate(2003,1) -查詢(xún) 2003 年全部日期列表 SELECT * FROM dbo.f_getda

39、te(2003,NULL)-*/CREATE FUNCTION dbo.f_getdate(year int, -要查詢(xún)的年份bz bit -bz=0 查詢(xún)工作日,bz=1 查詢(xún)休息日,bz IS NULL 查詢(xún)?nèi)咳掌?RETURNS re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3)ASBEGIN DECLARE tb TABLE(ID int IDENTITY(0,1),Date datetime) INSERT INTO tb(Date) SELECT TOP 366 DATEADD(Year,YEAR-190

40、0,'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

41、 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 RETURNENDGO/*=*/if exists (select * from dbo.sysobjects where id = object_i

42、d(N'dbo.f_getdate') and xtype in (N'FN', N'IF', N'TF')drop function dbo.f_getdateGO/*-生成列表 生成指定日期段的日期列表-鄒建 2005.03(引用請(qǐng)保留此信息)-*/*-調(diào)用示例 -查詢(xún)工作日 SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',0) -查詢(xún)休息日 SELECT * FROM dbo.f_getdate('2005-1-3','

43、;2005-4-5',1) -查詢(xún)?nèi)咳掌?SELECT * FROM dbo.f_getdate('2005-1-3','2005-4-5',NULL)-*/CREATE FUNCTION dbo.f_getdate(begin_date Datetime, -要查詢(xún)的開(kāi)始日期end_date Datetime, -要查詢(xún)的結(jié)束日期bz bit -bz=0 查詢(xún)工作日,bz=1 查詢(xún)休息日,bz IS NULL 查詢(xún)?nèi)咳掌?RETURNS re TABLE(id int identity(1,1),Date datetime,Weekday nvar

44、char(3)ASBEGIN 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 Dat

45、e<=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

46、<=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

47、 begin_date=DATEADD(Day,366,begin_date) END RETURNENDGO工作日處理函數(shù)(標(biāo)準(zhǔn)節(jié)假日).sql SQL code if exists (select * from dbo.sysobjects where id = object_id(N'dbo.f_WorkDay') and xtype in (N'FN', N'IF', N'TF')drop function dbo.f_WorkDayGO-計(jì)算兩個(gè)日期相差的工作天數(shù)CREATE FUNCTION f_WorkDay(dt_

48、begin datetime, -計(jì)算的開(kāi)始日期dt_end datetime -計(jì)算的結(jié)束日期)RETURNS intASBEGIN DECLARE workday int,i int,bz bit,dt datetime IF dt_begin>dt_end SELECT bz=1,dt=dt_begin,dt_begin=dt_end,dt_end=dt ELSE SET bz=0 SELECT i=DATEDIFF(Day,dt_begin,dt_end)+1, workday=i/7*5, dt_begin=DATEADD(Day,i/7*7,dt_begin) WHILE d

49、t_begin<=dt_end BEGIN SELECT workday=CASE WHEN (DATEFIRST+DATEPART(Weekday,dt_begin)-1)%7 BETWEEN 1 AND 5 THEN workday+1 ELSE workday END, dt_begin=dt_begin+1 END RETURN(CASE WHEN bz=1 THEN -workday ELSE workday END)ENDGO/*=*/if exists (select * from dbo.sysobjects where id = object_id(N'dbo.f_WorkDayADD') and xtype in (N'FN', N'IF', N'TF')drop function dbo.f_WorkDayADDGO-在指定日期上,增加指定工作天數(shù)后的日期CREATE FUNCTION f_WorkDayADD(date datetime, -基礎(chǔ)日期workday int -要增加的工作日數(shù))RETURNS datetimeASBEGIN DECLARE bz int -增加整周的天數(shù) SELECT bz=CASE

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論