SQL語句大全完整版_百度文庫_第1頁
SQL語句大全完整版_百度文庫_第2頁
SQL語句大全完整版_百度文庫_第3頁
SQL語句大全完整版_百度文庫_第4頁
SQL語句大全完整版_百度文庫_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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/*-功能說明 下面的代碼是在SQL Server 2000上創(chuàng)建名為 MyDB 的數(shù)據(jù)庫 該數(shù)據(jù)庫包括1個主要數(shù)據(jù)文件、3個用戶定義的文件組和1個日

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

3、_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-用戶定義文件組2 ( NAME= 'MyDB_FG1_Dat', FILENAME= 'e:MyDB_FG2.ndf'-次要數(shù)據(jù)文件LOG ON -日志文件 ( NAME='MyDB_log', FILENAME='d:MyDB.ld

4、f'GO -B. 修改默認(rèn)數(shù)據(jù)文件組ALTER DATABASE MyDB MODIFY FILEGROUP MyDB_FG1DEFAULTGO -切換到新建的數(shù)據(jù)庫 MyDBUSE MyDB-C. 在默認(rèn)文件組MyDB_FG1創(chuàng)建表,并且指定圖像數(shù)據(jù)保存在用戶定義文件組MMyDB_FG2CREATE TABLE MyTable ( colaint PRIMARY KEY , colbchar(8 , colcimage TEXTIMAGE_ON MyDB_FG2-在用戶定義文件組MyDB_FG2上創(chuàng)建索引CREATE INDEX IX_MyTableON MyTable(colaON

5、 MyDB_FG2GO -D. 將要刪除數(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 REMOVEFILE MyDB_FG1_Dat1調(diào)整tempdb數(shù)據(jù)庫的文件屬性.sql:SQL code-A. 將tempdb數(shù)據(jù)庫的主數(shù)據(jù)文件大小設(shè)置為10MB。ALTER DATABASE tempdb MODIFYFILE( name=tempdev, size=100 MBGO -B.

6、 將tempdb數(shù)據(jù)庫的主數(shù)據(jù)文件移動到指定的磁盤分區(qū)上,并且為其添加一個數(shù)據(jù)文件。-移動主數(shù)據(jù)文件ALTER DATABASE tempdb MODIFYFILE ( NAME='tempdev', FILENAME='d:tempdb.mdf'-添加次要數(shù)據(jù)文件ALTER DATABASE tempdbADD FILE ( NAME='tempdata_1', FILENAME='d:tempdb_data_1.ndf'日期概念理解中的一些測試.sql:SQL code-A. 測試 datetime 精度問題DECLARE t

7、 TABLE(datechar(21INSERT 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 SELECT '1900-1-1 00:00:00.004'

8、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(dateas datetimeFROM t /*-結(jié)果 date 轉(zhuǎn)換后的日期 - - 1900-1-1 00:00:00.000 1900-01-01 00:00:00.00

9、0 1900-1-1 00:00:00.001 1900-01-01 00:00:00.000 1900-1-1 00:00:00.009 1900-01-01 00:00:00.010 1900-1-1 00:00:00.002 1900-01-01 00:00:00.003 1900-1-1 00:00:00.003 1900-01-01 00:00:00.003 1900-1-1 00:00:00.004 1900-01-01 00:00:00.003 1900-1-1 00:00:00.005 1900-01-01 00:00:00.007 1900-1-1 00:00:00.006

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

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

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

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

14、MAT設(shè)置對使用CONVERT把字符型日期轉(zhuǎn)換為日期的處理也具有影響 但不影響明確指定了style的CONVERT處理。 -*/ -示例 ,在下面的示例中,第一個CONVERT轉(zhuǎn)換未指定style,轉(zhuǎn)換的結(jié)果受SET DATAFORMAT的影響,第二個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-2005'-結(jié)果: 2005-01-02 00:00:00.

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

16、FORMAT 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./*-說明 如果輸入的日期不包含日期分隔符,那么SQL Server在對日期進(jìn)行解釋時 將忽略SET DATEFORMAT的設(shè)置。 -*/ -示例,在下面的代碼中,不包含日期分隔符的字符日期,在不同的SET DATEFORMAT設(shè)置下,其解釋的結(jié)果是一樣的。DE

17、CLARE 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-02-01 00:00:00.000SET LA

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

19、esday Mar 15 2005 8:59PM -*/ -設(shè)置會話的語言環(huán)境為: 簡體中文SET LANGUAGE N'簡體中文'SELECT DATENAME(Month,GETDATE(AS Month,DATENAME(Weekday,GETDATE(AS Weekday,CONVERT(varchar,GETDATE(,109AS CONVERT/*-結(jié)果 Month Weekday CONVERT - - - 05 星期四 05 19 2005 2:49:20:607PM -*/日期格式化處理.sql 日期推算處理.sqlCONVERT在日期轉(zhuǎn)換中的使用示例.sql

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

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

22、ode-1./*-說明 SET DATEFORMAT設(shè)置對使用CONVERT把字符型日期轉(zhuǎn)換為日期的處理也具有影響 但不影響明確指定了style的CONVERT處理。 -*/ -示例 ,在下面的示例中,第一個CONVERT轉(zhuǎn)換未指定style,轉(zhuǎn)換的結(jié)果受SET DATAFORMAT的影響,第二個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-2005'-結(jié)

23、果: 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./*-說明 如果輸入的日期包含了世紀(jì)部分,則對日期進(jìn)行解釋處理時 年份的解釋不受SET DATEFORMAT設(shè)置的影響。 -*/ -示例,在下面的代碼中,同樣的SET DATEFORMAT設(shè)置,輸入日期的世紀(jì)部分與不輸入日期的世紀(jì)部分,解釋的日期結(jié)果不同。DECLARE dt datetime -設(shè)置SET

24、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./*-說明 如果輸入的日期不包含日期分隔符,那么SQL Server在對日期進(jìn)行解釋時 將忽略SET DATEFORMAT的設(shè)置。 -*/ -示例,在下面的代碼中,不包含日期分隔符的字符日期,在不同的SET DATE

25、FORMAT設(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-0

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

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

28、CLARE dt datetimeSET dt=GETDATE(-1短日期格式:yyyy-m-dSELECT REPLACE(CONVERT(varchar(10,dt,120,N'-0','-'-2長日期格式:yyyy年mm月dd日-A. 方法1SELECT STUFF(STUFF(CONVERT(char(8,dt,112,5,0,N'年',8,0,N'月'+N'日'-B. 方法2SELECT DATENAME(Year,dt+N'年'+DATENAME(Month,dt+N'月'

29、;+DATENAME(Day,dt+N'日' -3長日期格式:yyyy年m月d日SELECT DATENAME(Year,dt+N'年'+CAST(DATEPART(Month,dtAS varchar+N'月'+DATENAME(Day,dt+N'日' -4.完整日期+時間格式:yyyy-mm-dd hh:mi:ss:mmmSELECT CONVERT(char(11,dt,120+CONVERT(char(12,dt,114日期推算處理.sqlSQL codeDECLARE dt datetimeSET dt=GETDATE(

30、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,dt*3-Month(dt-2,dt,120+'1'-B. 季度的最后一天(

31、CASE判斷法)SELECT CONVERT(datetime,CONVERT(char(8,DATEADD(Month,DATEPART(Quarter,dt*3-Month(dt,dt,120+CASE WHEN DATEPART(Quarter,dtin(1,4THEN '31'ELSE '30' END-C. 季度的最后一天(直接推算法)SELECT DATEADD(Day,-1,CONVERT(char(8,DATEADD(Month,1+DATEPART(Quarter,dt*3-Month(dt,dt,120+'1'-3指定日期所在

32、月份的第一天或最后一天-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. 月的最后一天(容易使用的錯誤方法)SELECT DATEADD(Month,1,DATEADD(Day,-DAY(dt,dt-4指定日期所在周的任意一天SELECT DATEADD(Day,number-DATEPART(Weekday,dt,dt-5指定日期所在周的任意星期

33、幾-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查詢指定日期段內(nèi)過生日的人員.sqlSQL code291911320-測試數(shù)據(jù)DECLARE t TABLE(IDint,Namevarchar(10,BirthdaydatetimeINSERT t SELECT 1,'aa','1999-01-01&#

34、39;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,'bb','1922-11-21'UNION ALL SELECT 7,'bb','

35、1989-12-11' DECLARE dt1 datetime,dt2 datetime -查詢 2003-12-05 至 2004-02-28 生日的記錄SELECT dt1='2003-12-05',dt2='2004-02-28'SELECT * FROM tWHERE DATEADD(Year,DATEDIFF(Year,Birthday,dt1,BirthdayBETWEEN dt1 AND dt2 OR DATEADD(Year,DATEDIFF(Year,Birthday,dt2,BirthdayBETWEEN dt1 AND dt2/*

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

37、1 AND dt2/*-查詢結(jié)果 ID Name Birthday - - - 1 aa 1999-01-01 00:00:00.000 2 bb 1996-02-29 00:00:00.000 7 bb 1989-12-11 00:00:00.000 -*/生成日期列表的函數(shù).sql日期推算處理.sqlSQL codeDECLARE dt datetimeSET dt=GETDATE(DECLARE number intSET number=3 -1指定日期該年的第一天或最后一天-A. 年的第一天SELECT CONVERT(char(5,dt,120+'1-1' -B. 年

38、的最后一天SELECT CONVERT(char(5,dt,120+'12-31' -2指定日期所在季度的第一天或最后一天-A. 季度的第一天SELECT CONVERT(datetime,CONVERT(char(8,DATEADD(Month,DATEPART(Quarter,dt*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 W

39、HEN DATEPART(Quarter,dtin(1,4THEN '31'ELSE '30' END-C. 季度的最后一天(直接推算法)SELECT DATEADD(Day,-1,CONVERT(char(8,DATEADD(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

40、,-1,CONVERT(char(8,DATEADD(Month,1,dt,120+'1'-C. 月的最后一天(容易使用的錯誤方法)SELECT DATEADD(Month,1,DATEADD(Day,-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 DATE

41、ADD(Day,number-(DATEPART(Weekday,dt+DATEFIRST-2%7-1,dt查詢指定日期段內(nèi)過生日的人員.sqlSQL code-測試數(shù)據(jù)DECLARE t TABLE(IDint,Namevarchar(10,BirthdaydatetimeINSERT t SELECT 1,'aa','1999-01-01'UNION ALL SELECT 2,'bb','1996-02-29'UNION ALL SELECT 3,'bb','1934-03-01'UNION A

42、LL SELECT 4,'bb','1966-04-01'UNION ALL SELECT 5,'bb','1997-05-01'UNION ALL SELECT 6,'bb','1922-11-21'UNION ALL SELECT 7,'bb','1989-12-11' DECLARE dt1 datetime,dt2 datetime -查詢 2003-12-05 至 2004-02-28 生日的記錄SELECT dt1='2003-12-05'

43、,dt2='2004-02-28'SELECT * FROM tWHERE DATEADD(Year,DATEDIFF(Year,Birthday,dt1,BirthdayBETWEEN dt1 AND dt2 OR DATEADD(Year,DATEDIFF(Year,Birthday,dt2,BirthdayBETWEEN dt1 AND dt2/*-結(jié)果 ID Name Birthday - - - 1 aa 1999-01-01 00:00:00.000 7 bb 1989-12-11 00:00:00.000 -*/ -查詢 2003-12-05 至 2006-02-

44、28 生日的記錄SET dt2='2006-02-28'SELECT * FROM tWHERE DATEADD(Year,DATEDIFF(Year,Birthday,dt1,BirthdayBETWEEN dt1 AND dt2 OR DATEADD(Year,DATEDIFF(Year,Birthday,dt2,BirthdayBETWEEN dt1 AND dt2/*-查詢結(jié)果 ID Name Birthday - - - 1 aa 1999-01-01 00:00:00.000 2 bb 1996-02-29 00:00:00.000 7 bb 1989-12-11

45、00:00:00.000 -*/生成日期列表的函數(shù).sql復(fù)雜年月處理.sqlSQL code-定義基本數(shù)字表declare T1 table(代碼int,名稱varchar(10,參加時間datetime,終止時間datetimeinsert into T1 select 12,'單位1','2003/04/01','2004/05/01' union all select 22,'單位2','2001/02/01','2003/02/01' union all select 42,'單位

46、3','2000/04/01','2003/05/01' union all select 25,'單位5','2003/04/01','2003/05/01' -定義年表declare NB table(代碼int,名稱varchar(10,年份intinsert into NB select 12,'單位1',2003 union all select 12,'單位1',2004 union all select 22,'單位2',2001 union a

47、ll select 22,'單位2',2002 union all select 22,'單位2',2003 -定義月表declare YB table(代碼int,名稱varchar(10,年份int,月份varchar(2insert into YB select 12,'單位1',2003,'04' union all select 22,'單位2',2001,'01' union all select 22,'單位2',2001,'12' -為年表+月表數(shù)據(jù)處

48、理準(zhǔn)備臨時表select top 8246 y=identity(int,1753,1into #tbyfrom (select idfrom syscolumns a, (select idfrom syscolumns b, (select idfrom syscolumns c-為月表數(shù)據(jù)處理準(zhǔn)備臨時表select top 12 m=identity(int,1,1into #tbmfrom syscolumns/*-數(shù)據(jù)處理-*/-年表數(shù)據(jù)處理select a.*from(select a.代碼,a.名稱,年份=b.yfrom T1 a,#tby bwhere b.ybetween y

49、ear(參加時間and year(終止時間 aleft join NB bon a.代碼=b.代碼and a.年份=b.年份where b.代碼is null -月表數(shù)據(jù)處理select a.*from(select a.代碼,a.名稱,年份=b.y,月份=right('00'+cast(c.mas varchar,2from T1 a,#tby b,#tbm cwhere b.y*100+c.mbetween convert(varchar(6,參加時間,112and convert(varchar(6,終止時間,112 aleft join YB bon a.代碼=b.代碼

50、and a.年份=b.年份and a.月份=b.月份where b.代碼is nullorder by a.代碼,a.名稱,a.年份,a.月份-刪除數(shù)據(jù)處理臨時表drop table #tby,#tbm交叉表.sqlSQL code-示例-示例數(shù)據(jù)create table tb(IDint,Timedatetimeinsert tbselect 1,'2005/01/24 16:20'union all select 2,'2005/01/23 22:45'union all select 3,'2005/01/23 0:30'union all

51、 select 4,'2005/01/21 4:28'union all select 5,'2005/01/20 13:22'union all select 6,'2005/01/19 20:30'union all select 7,'2005/01/19 18:23'union all select 8,'2005/01/18 9:14'union all select 9,'2005/01/18 18:04'go -查詢處理:select case when grouping(b.Time

52、=1 then 'Total' else b.Timeend,Mon=sum(case a.weekwhen 1 then 1 else 0 end,Tue=sum(case a.weekwhen 2 then 1 else 0 end,Wed=sum(case a.weekwhen 3 then 1 else 0 end,Thu=sum(case a.weekwhen 4 then 1 else 0 end,Fri=sum(case a.weekwhen 5 then 1 else 0 end,Sat=sum(case a.weekwhen 6 then 1 else 0 e

53、nd,Sun=sum(case a.weekwhen 0 then 1 else 0 end,Total=count(a.weekfrom(select Time=convert(char(5,dateadd(hour,-1,Time,108-時間交界點(diǎn)是1am,所以減1小時,避免進(jìn)行跨天處理 ,week=(datefirst+datepart(weekday,Time-1%7 -考慮datefirst對datepart的影響 from tb aright join(select id=1,a='16:00',b='19:59',Time='5pm -

54、9pm' union all select id=2,a='20:00',b='23:59',Time='9pm - 1am' union all select id=3,a='00:00',b='02:59',Time='1am - 4am' union all select id=4,a='03:00',b='07:29',Time='4am - 8:30am' union all select id=5,a='07:30'

55、,b='11:59',Time='8:30am - 1pm' union all select id=6,a='12:00',b='15:59',Time='1pm - 5pm'bon a.Time>=b.aand a.Time<b.bgroup by b.id,b.Timewith rolluphaving grouping(b.Time=0 or grouping(b.id=1go -刪除測試drop table tb/*-測試結(jié)果 Mon Tue Wed Thu Fri Sat Sun Total

56、 - - - - - - - - - 5pm - 9pm 0 1 2 0 0 0 0 3 9pm - 1am 0 0 0 0 0 0 2 2 1am - 4am 0 0 0 0 0 0 0 0 4am - 8:30am 0 0 0 0 1 0 0 1 8:30am - 1pm 0 1 0 0 0 0 0 1 1pm - 5pm 1 0 0 1 0 0 0 2 Total 1 2 2 1 1 0 2 9 (所影響的行數(shù)為 7 行) -*/任意兩個時間之間的星期幾的次數(shù)-橫.sql291911320統(tǒng)計(jì)-交叉表+日期+優(yōu)先.sqlSQL code-交叉表,根據(jù)優(yōu)先級取數(shù)據(jù),日期處理create t

57、able tb(qidint,ridnvarchar(4,tagnamenvarchar(10,starttimesmalldatetime,endtimesmalldatetime,startweekdayint,endweekdayint,startdatesmalldatetime,enddatesmalldatetime,dintinsert tbselect 1,'A1','未訂','08:00','09:00',1 ,5 ,null ,null ,1union all select 1,'A1',

58、9;未訂','09:00','10:00',1 ,5 ,null ,null ,1union all select 1,'A1','未訂','10:00','11:00',1 ,5 ,null ,null ,1union all select 1,'A1','裝修','08:00','09:00',null,null,'2005-1-18','2005-1-19',2 -union all sel

59、ect 1,'A1','裝修','09:00','10:00',null,null,'2005-1-18','2005-1-19',2union all select 1,'A1','裝修','10:00','11:00',null,null,'2005-1-18','2005-1-19',2union all select 1,'A2','未訂','08:00&#

60、39;,'09:00',1 ,5 ,null ,null ,1union all select 1,'A2','未訂','09:00','10:00',1 ,5 ,null ,null ,1union all select 1,'A2','未訂','10:00','11:00',1 ,5 ,null ,null ,1-union all select 1,'A2','裝修','08:00','09

61、:00',null,null,'2005-1-18','2005-1-19',2union all select 1,'A2','裝修','09:00','10:00',null,null,'2005-1-18','2005-1-19',2-union all select 1,'A2','裝修','10:00','11:00',null,null,'2005-1-18','

62、;2005-1-19',2go /*-樓主這個問題要考慮幾個方面 1. 取星期時,set datefirst 的影響 2. 優(yōu)先級問題 3. qid,rid 應(yīng)該是未知的(動態(tài)變化的 -*/ -實(shí)現(xiàn)的存儲過程如下create proc p_qrydate smalldatetime -要查詢的日期asset nocountondeclare week int,s nvarchar(4000-格式化日期和得到星期select date=convert(char(10,date,120 ,week=(datefirst+datepart(weekday,date-1%7 ,s=''select id=

溫馨提示

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

評論

0/150

提交評論