以復習為目的吧,整理了自己以前在學習T-SQL時的 常用語句下載
獲取當前日期時間
1 select getdate() 2 --結果:2012-07-12 06:20:58.670
獲取星期幾
----返回table CREATE FUNCTION [dbo].[WeekDayName] ( ) RETURNS @WeekDayName TABLE([Id] INT,[WeekDayName] NVARCHAR(15)) AS BEGIN INSERT INTO @WeekDayName ([Id],[WeekDayName]) VALUES (0,'Saturday'),(1,'Sunday'),(2,'Monday'),(3,'Tuesday'),(4,'Wednesday'),(5,'Thursday'),(6,'Friday') RETURN END
----返回名稱 CREATE FUNCTION [dbo].[WeekDayNameOfDate] ( @Date DATETIME ) RETURNS NVARCHAR(10) BEGIN RETURN CASE (DATEPART(dw, @Date) + @@DATEFIRST) % 7 WHEN 0 THEN 'Saturday' WHEN 1 THEN 'Sunday' WHEN 2 THEN 'Monday' WHEN 3 THEN 'Tuesday' WHEN 4 THEN 'Wednesday' WHEN 5 THEN 'Thursday' WHEN 6 THEN 'Friday' END END ----調用表值函數 select * from dbo.WeekDayName() ----調用標量值函數select dbo.WeekDayNameOfDate('2012-01-03')
select getdate(),datename(weekday,getdate()),datepart(weekday,getdate()) --datename 返回星期名稱; --datepart 返回數值; --例子: select case datepart(dw,getdate()) when 1 then '星期天 ' when 2 then '星期一 ' when 3 then '星期二 ' when 4 then '星期三 ' when 5 then '星期四 ' when 6 then '星期五 ' when 7 then '星期六 ' end
下面是一些常用的關於時間日期的方法
View Code
1 select getdate() 2 --結果2011-10-23 11:06:23.390 3 4 select datediff(yyyy,getdate(),'2011-01-01') 5 select datediff(yyyy,getdate(),'2010-1-1') 6 select datediff(yyyy,getdate(),'2012-1-1') 7 8 --可用於判斷數據庫里面的數據是否屬於同年 9 --如果為同一年則返回0 10 --前年日期返回負數 11 --明后年日期返回大於零的正整數 12 ------------------------------------ 13 --一個月第一天的 14 Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 15 16 --本周的星期一 17 Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 18 19 --一年的第一天 20 Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 21 22 --季度的第一天 23 Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 24 25 --當天的半夜 26 Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 27 28 --上個月的最后一天 29 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 30 31 --去年的最后一天 32 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 33 34 --本月的最后一天 35 Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 36 37 --本年的最后一天 38 Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) 39 40 --本月的第一個星期一 41 select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) 42 ------------------------------------------- 43 --建立一個表,其中的記錄包含有當前的日期和時間,可以添加一個DATETIME型字段,指定其缺省值為函數GETDATE()的返回值,就象這樣: 44 45 Create TABLE #site_log (username VARCHAR(40),useractivity VARCHAR(100),entrydate DATETIME DEFAULT GETDATE()) 46 drop table #site_log 47 48 --轉換日期和時間 49 --函數GETDATE()的返回值在顯示時只顯示到秒。實際上,SQL Sever內部時間可以精確到毫秒級(確切地說,可以精確到3.33毫秒) 50 Select CONVERT(VARCHAR(30),GETDATE(),9) 51 在函數CONVERT()中你可以使用許多種不同風格的日期和時間格式 52 日期和時間的類型: 53 類型值 標准 輸出 54 0 Default mon dd yyyy hh:miAM 55 1 USA mm/dd/yy 56 2 ANSI yy.mm.dd 57 3 British/French dd/mm/yy 58 4 German dd.mm.yy 59 5 Italian dd-mm-yy 60 6 - dd mon yy 61 7 - mon dd,yy 62 8 - hh:mi:ss 63 9 Default + milliseconds--mon dd yyyy hh:mi:ss:mmmAM(or ) 64 10 USA mm-dd-yy 65 11 JAPAN yy/mm/dd 66 12 ISO yymmdd 67 13 Europe Default + milliseconds--dd mon yyyy hh:mi:ss:mmm(24h) 68 14 - hh:mi:ss:mmm(24h) 69 70 select convert(varchar(30),getdate(),106) 71 select convert(varchar(30),getdate(),6) 72 /**類型0,9,和13總是返回四位的年。 73 對其它類型,要顯示世紀,把style值加上100。 74 類型13和14返回24小時時鍾的時間。 75 類型0,7,和13返回的月份用三位字符表示(用Nov代表November) 76 對表中所列的每一種格式,你可以把類型值加上100來顯示有世紀的年(例如,00年將顯示為2000年)*/ 77 78 --抽取日期和時間 79 --在許多情況下,也許只想得到日期和時間的一部分,而不是完整的日期和時間。為了抽取日期的特定部分,你可以使用函數DATEPARt() 80 81 select datepart(dd,getdate()) 82 select datepart(mm,getdate()) 83 select datepart(yyyy,getdate()) 84 select datepart(yy,getdate()) 85 --函數DATEPART()的參數是兩個變量。第一個變量指定要抽取日期的哪一部分;第二個變量是實際的數據。在這個例子中,函數DATEPART()抽取月份,因為mm代表月份。下面是這個Select 語句的輸出結果: 86 --函數DATEPART()的返回值是一個整數 87 88 --日期的各部分及其簡寫 89 日期部分 簡寫 值 90 year yy 1753--9999 91 quarter qq 1--4 92 month mm 1--12 93 day of year dy 1--366 94 day dd 1--31 95 week wk 1--53 96 weekday dw 1--7(Sunday--Saturday) 97 hour hh 0--23 98 minute mi 0--59 99 second ss 0--59 100 milisecond ms 0--999 101 102 --當你需要進行日期和時間的比較時,使用函數DATEPART()返回整數是有用的。要以更易讀的格式得到部分的日期和時間,你可以使用函數DATENAME(),如下例所示: 103 104 Select site_name ‘Site Name’ 105 DATENAME(mm,site_entrydate) ‘Month Posted’ 106 FROM site_directory 107 108 select datename(mm,getdate()) 109 110 --函數DATENAME()和函數DATEPART()接收同樣的參數 111 --它的返回值是一個字符串,而不是一個整數 112 113 --可以用函數DATENAME()來抽取一個星期中的某一天。下面的這個例子同時抽取一周中的某一天和日期中的月份: 114 115 select datename(dw,getdate())+'-'+datename(mm,getdate()) as 'Day and Month Posted' 116 117 --返回日期和時間范圍 118 --當分析表中的數據時,也許希望取出某個特定時間的數據 119 --也許對特定的某一天中,比如說2000年12月25日――訪問者在你站點上的活動感興趣,要取出這種類型的數據,你也許會試圖使用這樣的Select語句 120 Select * FROM weblog Where entrydate="12/25/20000" 121 --不要這樣做。這個Select語句不會返回正確的記錄 122 --它將只返回日期和時間是12/25/2000 12:00:00:000AM的記錄,換句話說,只有剛好在午夜零點輸入的記錄才被返回。 123 124 --問題是SQL Sever將用完整的日期和時間代替部分日期和時間。 125 --例如,當你輸入一個日期,但不輸入時間時,SQL Sever將加上缺省的時間"00:00:00:000AM" 126 --當你輸入一個時間,但不輸入日期時,SQL Sever將加上缺省的日期"Jan 1 1900"。 127 --要返回正確的記錄,你需要適用日期和時間范圍。有不止一種途徑可以做到這一點。例如,下面的這個Select 語句將能返回正確的記錄: 128 129 create table #dt(da datetime,id int)--驗證sql缺省日期時間 130 insert into #dt values('2011-10-10',1) 131 insert into #dt values('09:10:10',2) 132 select * from #dt 133 drop table #dt 134 135 Select * FROM weblog 136 Where entrydate>=”12/25/2000” AND entrydate<”12/26/2000” 137 --這個語句可以完成任務,因為它選取的是表中的日期和時間大於等於12/25/2000 00:00:00:000AM並小於12/26/2000 00:00:00:000AM的記錄。換句話說,它將正確地返回2000年聖誕節這一天輸入的每一條記錄。 138 --另一種方法是,你可以使用LIKE來返回正確的記錄。通過在日期表達式中包含通配符"%",你可以匹配一個特定日期的所有時間。這里有一個例子: 139 140 Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’ 141 142 --這個語句可以匹配正確的記錄。因為通配符“%”代表了任何時間。 143 --使用這兩種匹配日期和時間范圍的函數,你可以選擇某個月,某一天,某一年,某個小時,某一分鍾,某一秒,甚至某一毫秒內輸入的記錄。但是,如果你使用 LIKE 來匹配秒或毫秒,你首先需要使用函數CONVERT()把日期和時間轉換為更精確的格式 144 145 --比較日期和時間 146 --最后,還有兩個日期和時間函數對根據日期和時間取出記錄是有用的。使用函數DATEADD()和DATEDIFF(),你可以比較日期的早晚。例如,下面的Select語句將顯示表中的每一條記錄已經輸入了多少個小時: 147 148 select datediff(mm,getdate(),'2011-10-10') 149 150 --函數DADEDIFF()的參數是三個變量。第個變量指定日期的某一部分。在這個例子中,是按小時對日期進行比較,在日期2000年11月1日和2000年11月30日的指定時間之間有689個小時。另外兩個參數是要進行比較的時間。為了返回一個正數,較早的時間應該先給。 151 --函數DATEADD()把兩個日期相加。當你需要計算截止日期這一類的數據時,這個函數是有用處的 152 153 154 select dateadd(mm,-1,getdate()); 155 156 --函數DATEADD()的參數有三個變量。第一個變量代表日期的某一部分,這個例子用到了代表月份的mm。 157 --第二個變量指定了時間的間隔――在本例中是一個月。 158 --最后一個變量是一個日期 159 --注意: 160 --使用函數DATEADD()把一個日期加上一個月,它並不加上30天。這個函數只簡單地把月份值加1。 161 162 163 --------------------------------------- 164 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 165 Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 166 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 167 Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 168 Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 169 Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 170 Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 171 Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 172 Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 173 Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 174 Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 175 Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 176 Select CONVERT(varchar(100), GETDATE(), 12): 060516 177 Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 178 Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 179 Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 180 Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 181 Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM 182 Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 183 Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47 184 Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 185 Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM 186 Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006 187 Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16 188 Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006 189 Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006 190 Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006 191 Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006 192 Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006 193 Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49 194 Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM 195 Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006 196 Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16 197 Select CONVERT(varchar(100), GETDATE(), 112): 20060516 198 Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 199 Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 200 Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 201 Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700 202 Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827: 203 Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM
各系統表的作用
View Code
1 MSSQL中各個系統表的作用 2 3 sysaltfiles 主數據庫 保存數據庫的文件 4 syscharsets 主數據庫 字符集與排序順序 5 sysconfigures 主數據庫 配置選項 6 syscurconfigs 主數據庫 當前配置選項 7 sysdatabases 主數據庫 服務器中的數據庫 8 syslanguages 主數據庫 語言 9 syslogins 主數據庫 登陸帳號信息 10 sysoledbusers 主數據庫 鏈接服務器登陸信息 11 sysprocesses 主數據庫 進程 12 sysremotelogins主數據庫 遠程登錄帳號 13 syscolumns 每個數據庫 列 14 sysconstrains 每個數據庫 限制 15 sysfilegroups 每個數據庫 文件組 16 sysfiles 每個數據庫 文件 17 sysforeignkeys 每個數據庫 外部關鍵字 18 sysindexs 每個數據庫 索引 19 sysmenbers 每個數據庫 角色成員 20 sysobjects 每個數據庫 所有數據庫對象 21 syspermissions 每個數據庫 權限 22 systypes 每個數據庫 用戶定義數據類型 23 sysusers 每個數據庫 用戶 24 25 26 --用什么方法可以得到一個表中所有的列名。SQl語句。 27 select 列名=name from syscolumns where id=object_id(N'要查的表名') 28 29 use gpStrudy 30 select name="name" from syscolumns where id=object_id(N'bookTable')
goto在T-SQL中的用法
View Code
1 /** 2 GOTO語句可以實現無條件跳轉 3 語法格式 GOTO lable 其中lable為要跳轉到的語句標號 4 遇到GOTO語句時直接跳轉到lable標簽處繼續執行,而goto之后的語句不再執行 5 **/ 6 7 declare @result int=0 8 declare @sn int =0 9 loop_1:--定義標號 10 set @result=@result+@sn 11 set @sn=@sn+1 12 if(@sn<=100) 13 goto loop_1--如果小於100就跳轉到loop_1標號處 14 print @result
后續將會繼續整理出關於T-SQL的相關資料
