T-SQL


以復習為目的吧,整理了自己以前在學習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/2000AND entrydate<12/26/2000137 --這個語句可以完成任務,因為它選取的是表中的日期和時間大於等於12/25/2000 00:00:00:000AM並小於12/26/2000 00:00:00:000AM的記錄。換句話說,它將正確地返回2000年聖誕節這一天輸入的每一條記錄。
138 --另一種方法是,你可以使用LIKE來返回正確的記錄。通過在日期表達式中包含通配符"%",你可以匹配一個特定日期的所有時間。這里有一個例子:
139 
140 Select * FROM weblog Where entrydate LIKEDec 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的相關資料

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM