SqlServer学习笔记【暂】
生活随笔
收集整理的這篇文章主要介紹了
SqlServer学习笔记【暂】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Sql學(xué)習(xí)筆記,暫時(shí)先保存在著,等不忙了再整理成章節(jié),如果其中有問題的,還請各位大神不吝賜教!
1 --------------------------------------所有的數(shù)據(jù)基于Northwind庫--------------------------- 2 3 --Order by 支持多個(gè)排序 4 select * from dbo.Employees order by EmployeeID asc,TitleOfCourtesy desc,BirthDate asc; 5 6 --Title中包含es的所有數(shù)據(jù) 7 select * from dbo.Employees where Title like '%es%'; 8 9 --Title中倒數(shù)第二個(gè)字符為v,最后一個(gè)字符任意 10 select * from dbo.Employees where Title like '%v_'; 11 12 --集合匹配只在 MSSQLServer 上提供支持,在 MYSQL、Oracle、DB2 等數(shù)據(jù)庫中不支持, 必須采用變通的手段來實(shí)現(xiàn)。 13 --查詢LastName中以d或者s開頭的數(shù)據(jù) 14 select * from dbo.Employees where LastName like '[ds]%';
15 --在其他的數(shù)據(jù)庫中我們可以變通的設(shè)置下[這個(gè)就是通用的sql了] 16 select * from dbo.Employees where LastName like 'd%' or LastName like 's%' 17 18 --否定符^來對集合取反,它匹配不與字符集中任意一個(gè)字符相匹配的字符 19 --查詢LastName中所有不以d或者s開頭的數(shù)據(jù) 20 select * from dbo.Employees where LastName like '[^ds]%';
21 --變?yōu)橥ㄓ玫膕ql 22 select * from dbo.Employees where not(LastName like 'd%') And not(LastName like 's%'); 23 24 -- 通配符過濾一個(gè)非常強(qiáng)大的功能,不 過 在使 用通配符過濾進(jìn)行檢索的時(shí)候,數(shù)據(jù)庫系統(tǒng) 會(huì)對全表進(jìn)行掃描,所以執(zhí)行速度非常慢。 25 --因此不要過分使用通配符過濾,在使用其他方式 可以實(shí)現(xiàn)的效果的時(shí)候就應(yīng)該避免使用通配符過濾 26 27 28 --空值檢測 29 select * from dbo.Employees where Region is null;
30 --檢測Region不為空 31 select * from dbo.Employees where Region is not null; 32 33 -- 反義運(yùn)算符 34 -- “=”、“<”、“>”等運(yùn)算符都是用來進(jìn)行數(shù)值判斷的,有的時(shí)候則會(huì)想使用這些運(yùn)算符 的反義 35 --查詢Extension不大于2300的數(shù)據(jù); 36 select * from dbo.Employees where Extension !>2300; 37 38 --通用Sql的反義運(yùn)算符 不等于<> 不大于<= 不小于>= 39 select * from dbo.Employees where Extension <=2300;
40 --或者使用not 41 select * from dbo.Employees where not (Extension=2300) and (Extension<2300); 42 43 44 --多值檢測 45 --查詢員工序列號為1,3,7的員工信息 46 select * from dbo.Employees where EmployeeID =1 or EmployeeID=3 or EmployeeID=7; 47 --簡寫 48 select * from dbo.Employees where EmployeeID in(1,3,7); 49 50 -- 范圍值檢測 51 --檢索EmployeeID在3到8之間的數(shù)據(jù) 52 select * from dbo.Employees where EmployeeID>=3 and EmployeeID <=8; 53 --簡寫 54 select * from dbo.Employees where EmployeeID between 3 and 8; 55 56 --數(shù)據(jù)分組 57 --需要注意的是GROUP BY子句的位置,GROUP BY子句必須放到SELECT語句的之后, 58 --如果 SELECT語句有WHERE子句,則GROUP BY子句必須放到WHERE語句的之后。 59 60 select EmployeeID from dbo.Orders group by EmployeeID; 61 62 --分組函數(shù)和聚合函數(shù)聯(lián)合使用 63 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID; 64 65 --首先根據(jù)EmployeeID分組,再根據(jù)OrderID分組 66 select EmployeeID,OrderID from dbo.Orders group by EmployeeID,OrderID; 67 68 --分組函數(shù),聚合函數(shù)以及排序功能混合使用 69 select EmployeeID,ShipVia,COUNT(*) OrderCount from dbo.Orders group by EmployeeID,ShipVia order by ShipVia,EmployeeID; 70 71 72 --HAVING條件過濾 73 --根據(jù)EmployeeID分組,查詢分組總數(shù)大于100的ID 74 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*)>100; 75 76 --having過濾條件和in聯(lián)合使用 77 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*) in(123,96,72) 78 79 --HAVING語句能夠使用的語法和WHERE幾乎是一樣的,不過使用WHERE的時(shí)候,GROUP BY 子句要位于WHERE子句之后, 80 --而使用HAVING子句的時(shí)候,GROUP BY子句要位于HAVING子句之前 81 82 83 --ROW_NUMBER OVER(排序規(guī)則) 84 select ROW_NUMBER() over(order by orderid) id, OrderID,EmployeeID,ShipVia from Orders; 85 86 87 --查詢第3行到第10行的數(shù)據(jù)[子查詢] 88 --方法一: 89 select * from( 90 select ROW_NUMBER() over (order by orderId) id,OrderID,EmployeeID,ShipVia from Orders 91 )T where t.id between 3 and 10; 92 --方法二: 93 select top 8 * from dbo.Orders where OrderID not in 94 (select top 2 OrderID from Orders); 95 96 97 --DISTINCT去重復(fù)數(shù)據(jù) 98 select distinct EmployeeID from Orders; 99 100 --常量字段 也稱為‘常量值’ 并沒有什么實(shí)際的意義 101 select '產(chǎn)品訂單' as 'name',* from dbo.Orders ; 102 103 --字段間計(jì)算 [可用于select,insert,update,where等條件中] 104 select OrderID,(ShipVia*Freight) as Price from dbo.Orders; 105 106 --數(shù)據(jù)處理函數(shù) 107 108 ---主流數(shù)據(jù)庫系統(tǒng)都提供了計(jì)算字符串長度的函數(shù),在MYSQL、Oracle、DB2中這個(gè)函數(shù) 名稱為LENGTH, 109 -- 而在MSSQLServer中這個(gè)函數(shù)的名稱則為LEN 110 select ProductID,ProductName,LEN(ProductName) as ProductNameLen from Products; 111 112 --主流系統(tǒng)都提供了取得字符串的子串的函數(shù),在MYSQL、MSSQLServer中這個(gè)函數(shù)名稱 為SUBSTRING, 113 --而在Oracle、DB2這個(gè)函數(shù)名稱為SUBSTR。 114 --這個(gè)函數(shù)接受三個(gè)參數(shù),第一個(gè) 參數(shù)為要取的主字符串,第二個(gè)參數(shù)為字串的起始位置(從1開始計(jì)數(shù)),第三個(gè)參數(shù)為字串 的長度 115 --注意在數(shù)據(jù)庫中Start的index索引是從1開始的 116 select ProductID,SUBSTRING(ProductName,1,3)as 'SubProductName' from dbo.Products; 117 118 --主流系統(tǒng)都提供了計(jì)算正弦函數(shù)值的函數(shù)SIN和計(jì)算絕對值的函數(shù)ABS,它們都接受一個(gè)數(shù)值類型的參數(shù) 119 select ProductID,SIN(UnitPrice) SInPrice from dbo.Products; 120 select ProductID,UnitPrice,ABS(UnitPrice) AbsPrice,SIN(UnitPrice) as SInPrice from dbo.Products 121 122 --拼接字符串 123 select '產(chǎn)品ID為:'+CONVERT(varchar,ProductID)+'的產(chǎn)品名稱為:'+ProductName as Description from dbo.Products 124 125 --不從實(shí)體表中取的數(shù)據(jù) 有的時(shí)候我們需要查詢一些不能從任何實(shí)體表中能夠取得的數(shù)據(jù), 126 --比如將數(shù)字1作為結(jié)果集或者計(jì)算字符串“abc”的長度 127 select distinct 1 as '1' from Products; 128 --MYSQL和MSSQLServer允許使用不帶FROM子句的SELECT語句來查詢這些不屬于任何實(shí) 體表的數(shù)據(jù),比如下面的SQL將1作為結(jié)果集 129 select 1 as '1'; 130 select LEN('abc'); 131 SELECT 1,2,3,'a','b','c'; 132 133 --求打印出打印5以內(nèi)自然數(shù)以及它們的平方數(shù) 134 SELECT 1 as '序號',1 * 1 as '平方數(shù)' 135 UNION SELECT 2,2 * 2 136 UNION SELECT 3,3 * 3 137 UNION SELECT 4,4 * 4 138 UNION SELECT 5,5 * 5 ; 139 140 -- 分別列出所有的正式員工和所有的臨時(shí)工的姓名 141 select '正式員工' 142 UNION ALL 143 select LastName from dbo.emp 144 union all 145 select '臨時(shí)工' 146 union all 147 select LastName from dbo.Employees; 148 149 CREATE TABLE T_Person (FIdNumber VARCHAR(20), FName VARCHAR(20),FBirthDay DATETIME, FRegDay DATETIME,FWeight NUMERIC(10,2)) 150 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789120','Tom','1981-03-22','1998-05-01',56.67); 151 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789121','Jim','1987-01-18','1999-08-21',36.17); 152 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789122','Lily','1987-11-08','2001-09-18',40.33); 153 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789123','Kelly','1982-07-12','2000-03-01',46.23); 154 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789124','Sam','1983-02-16','1998-05-01',48.68); 155 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789125','Kerry','1984-08-07','1999-03-01',66.67); 156 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789126','Smith','1980-01-09','2002-09-23',51.28); 157 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789127','BillGates','1972-07-18','1995-06-19',60.32); 158 159 select * from T_Person 160 161 162 --一般用 Date 來表示日期類型 163 --一般用 Time 來表示時(shí)間類型 164 -- 在數(shù)據(jù)庫中, 一般用 DateTime 來表示日期時(shí)間類型 165 --一般用 TimeStamp 來表示日期時(shí)間類型 166 167 --獲取當(dāng)前時(shí)間 168 select GETDATE() as '當(dāng)前日期時(shí)間'; 169 170 --當(dāng)前日期 171 select CONVERT(varchar(50),GETDATE(),101) as '當(dāng)前日期'; 172 173 --當(dāng)前時(shí)間 174 select CONVERT(varchar(50),GETDATE(),108) as '當(dāng)前時(shí)間'; 175 176 177 --取值 別名 說明 178 --year yy,yyyy 年份 179 --quarter qq,q 季度 180 --month mm,m 月份 181 --dayofyear dy,y 當(dāng)年度的第幾天 182 --day dd,d 日 183 --week wk,ww 當(dāng)年度的第幾周 184 --weekday dw,w 星期幾 185 --hour hh 小時(shí) 186 --minute mi,n 分 187 --second ss,s 秒 188 --millisecond ms 毫秒 189 190 --在當(dāng)前日期上加兩天 191 select DATEADD(DAY,2,GETDATE()); 192 select CONVERT(varchar(50),(select DATEADD(DAY,2,GETDATE())),101); 193 194 --當(dāng)前時(shí)間的下一個(gè)星期 195 select DATEADD(week,1,getdate()); 196 197 --當(dāng)前時(shí)間的上一個(gè)月 198 select DATEADD(MONTH,-1,getdate()); 199 200 --DATEDIFF()函數(shù)用于計(jì)算兩個(gè)日期之間的差額 201 202 --計(jì)算月份差 203 select DATEDIFF(month,getdate(),(select dateadd(month,2,getdate()))) as '計(jì)算月份差'; 204 205 --DATENAME()函數(shù),這個(gè)函數(shù)可以返回一個(gè)日期的特定部分,并且 盡量用名稱來表述這個(gè)特定部分, 206 --其參數(shù)格式如下: DATENAME(datepart,date) 其中參數(shù)date為待計(jì)算日期, 207 --date 參數(shù)也可以是日期格式的字符串;參數(shù)datepart指定 要返回的日期部分的參數(shù) 208 209 --今天是星期幾 210 select DATENAME(dw,getdate()); 211 212 --當(dāng)前年份 213 select DATENAME(YY,GETDATE()) as '當(dāng)前年份'; 214 215 --獲取當(dāng)年度的第幾天 216 select '今天是'+DATENAME(YYYY,GETDATE())+'年第: '+ DATENAME(DAYOFYEAR,GETDATE())+'天' as '當(dāng)年度的第幾天 '; 217 218 select GETDATE() as '當(dāng)前日期', 219 DATENAME(YY,(select getdate())) as '年', 220 DATENAME(MONTH,(select getdate())) as '月', 221 DATENAME(DAY,(select GETDATE())) as '日', 222 DATENAME(HH,(select GETDATE())) as '小時(shí)', 223 DATENAME(MM,(select getdate())) as '分鐘', 224 DATENAME(S,(select GETDATE())) as '秒', 225 DATENAME(MS,(select GETDATE())) as '毫秒'; 226 227 228 --DATEPART()函數(shù)和DATENAME()函數(shù)完全一樣,不過其實(shí)它們并不是只是名稱不同的別名函數(shù), 229 --雖然都是用來提取日期的特定部分的,不過DATEPART()函數(shù)的返回值是數(shù)字而DATENAME()函數(shù)則會(huì)將盡可能的以名稱的方式做為返回值 230 231 select DATEPART(YY,(select getdate())); 232 233 --類型轉(zhuǎn)換 類型轉(zhuǎn)換 234 SELECT CAST('-30' AS INTEGER) as i, 235 CONVERT(DECIMAL,'3.1415726') as d, 236 CONVERT(DATETIME,'2008-08-08 08:09:10') as dt; 237 238 select RIGHT('123456789120',3) as '后三位', 239 CAST(RIGHT('123456789120',3) as integer) as '后三位轉(zhuǎn)化為整數(shù)類型', 240 CAST(RIGHT('123456789120',3) as integer)+1 as '后三位加1', 241 CONVERT(integer,RIGHT('123456789120',3))/2 as '后三位除以2'; 242 243 --空值驗(yàn)證 244 --COALESCE的簡寫版本ISNULL 245 select ShipRegion,ISNULL(ShipRegion,'為空') from Orders; 246 247 --case when 函數(shù) 248 --第一種用法 249 select OrderID, 250 (case ShipVia 251 when 1 then 'good' 252 when 2 then 'ok' 253 when 3 then 'no' 254 else 'Error' 255 end 256 ) as orderinfo 257 from Orders; 258 --第二種用法 259 select OrderID, 260 ( 261 case when ShipPostalCode<'100 ' then 'no' 262 when ShipPostalCode <'1000' then 'number' 263 else 'ok' 264 end)as ShipPostInfo from Orders;
1 --------------------------------------所有的數(shù)據(jù)基于Northwind庫--------------------------- 2 3 --Order by 支持多個(gè)排序 4 select * from dbo.Employees order by EmployeeID asc,TitleOfCourtesy desc,BirthDate asc; 5 6 --Title中包含es的所有數(shù)據(jù) 7 select * from dbo.Employees where Title like '%es%'; 8 9 --Title中倒數(shù)第二個(gè)字符為v,最后一個(gè)字符任意 10 select * from dbo.Employees where Title like '%v_'; 11 12 --集合匹配只在 MSSQLServer 上提供支持,在 MYSQL、Oracle、DB2 等數(shù)據(jù)庫中不支持, 必須采用變通的手段來實(shí)現(xiàn)。 13 --查詢LastName中以d或者s開頭的數(shù)據(jù) 14 select * from dbo.Employees where LastName like '[ds]%';
15 --在其他的數(shù)據(jù)庫中我們可以變通的設(shè)置下[這個(gè)就是通用的sql了] 16 select * from dbo.Employees where LastName like 'd%' or LastName like 's%' 17 18 --否定符^來對集合取反,它匹配不與字符集中任意一個(gè)字符相匹配的字符 19 --查詢LastName中所有不以d或者s開頭的數(shù)據(jù) 20 select * from dbo.Employees where LastName like '[^ds]%';
21 --變?yōu)橥ㄓ玫膕ql 22 select * from dbo.Employees where not(LastName like 'd%') And not(LastName like 's%'); 23 24 -- 通配符過濾一個(gè)非常強(qiáng)大的功能,不 過 在使 用通配符過濾進(jìn)行檢索的時(shí)候,數(shù)據(jù)庫系統(tǒng) 會(huì)對全表進(jìn)行掃描,所以執(zhí)行速度非常慢。 25 --因此不要過分使用通配符過濾,在使用其他方式 可以實(shí)現(xiàn)的效果的時(shí)候就應(yīng)該避免使用通配符過濾 26 27 28 --空值檢測 29 select * from dbo.Employees where Region is null;
30 --檢測Region不為空 31 select * from dbo.Employees where Region is not null; 32 33 -- 反義運(yùn)算符 34 -- “=”、“<”、“>”等運(yùn)算符都是用來進(jìn)行數(shù)值判斷的,有的時(shí)候則會(huì)想使用這些運(yùn)算符 的反義 35 --查詢Extension不大于2300的數(shù)據(jù); 36 select * from dbo.Employees where Extension !>2300; 37 38 --通用Sql的反義運(yùn)算符 不等于<> 不大于<= 不小于>= 39 select * from dbo.Employees where Extension <=2300;
40 --或者使用not 41 select * from dbo.Employees where not (Extension=2300) and (Extension<2300); 42 43 44 --多值檢測 45 --查詢員工序列號為1,3,7的員工信息 46 select * from dbo.Employees where EmployeeID =1 or EmployeeID=3 or EmployeeID=7; 47 --簡寫 48 select * from dbo.Employees where EmployeeID in(1,3,7); 49 50 -- 范圍值檢測 51 --檢索EmployeeID在3到8之間的數(shù)據(jù) 52 select * from dbo.Employees where EmployeeID>=3 and EmployeeID <=8; 53 --簡寫 54 select * from dbo.Employees where EmployeeID between 3 and 8; 55 56 --數(shù)據(jù)分組 57 --需要注意的是GROUP BY子句的位置,GROUP BY子句必須放到SELECT語句的之后, 58 --如果 SELECT語句有WHERE子句,則GROUP BY子句必須放到WHERE語句的之后。 59 60 select EmployeeID from dbo.Orders group by EmployeeID; 61 62 --分組函數(shù)和聚合函數(shù)聯(lián)合使用 63 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID; 64 65 --首先根據(jù)EmployeeID分組,再根據(jù)OrderID分組 66 select EmployeeID,OrderID from dbo.Orders group by EmployeeID,OrderID; 67 68 --分組函數(shù),聚合函數(shù)以及排序功能混合使用 69 select EmployeeID,ShipVia,COUNT(*) OrderCount from dbo.Orders group by EmployeeID,ShipVia order by ShipVia,EmployeeID; 70 71 72 --HAVING條件過濾 73 --根據(jù)EmployeeID分組,查詢分組總數(shù)大于100的ID 74 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*)>100; 75 76 --having過濾條件和in聯(lián)合使用 77 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*) in(123,96,72) 78 79 --HAVING語句能夠使用的語法和WHERE幾乎是一樣的,不過使用WHERE的時(shí)候,GROUP BY 子句要位于WHERE子句之后, 80 --而使用HAVING子句的時(shí)候,GROUP BY子句要位于HAVING子句之前 81 82 83 --ROW_NUMBER OVER(排序規(guī)則) 84 select ROW_NUMBER() over(order by orderid) id, OrderID,EmployeeID,ShipVia from Orders; 85 86 87 --查詢第3行到第10行的數(shù)據(jù)[子查詢] 88 --方法一: 89 select * from( 90 select ROW_NUMBER() over (order by orderId) id,OrderID,EmployeeID,ShipVia from Orders 91 )T where t.id between 3 and 10; 92 --方法二: 93 select top 8 * from dbo.Orders where OrderID not in 94 (select top 2 OrderID from Orders); 95 96 97 --DISTINCT去重復(fù)數(shù)據(jù) 98 select distinct EmployeeID from Orders; 99 100 --常量字段 也稱為‘常量值’ 并沒有什么實(shí)際的意義 101 select '產(chǎn)品訂單' as 'name',* from dbo.Orders ; 102 103 --字段間計(jì)算 [可用于select,insert,update,where等條件中] 104 select OrderID,(ShipVia*Freight) as Price from dbo.Orders; 105 106 --數(shù)據(jù)處理函數(shù) 107 108 ---主流數(shù)據(jù)庫系統(tǒng)都提供了計(jì)算字符串長度的函數(shù),在MYSQL、Oracle、DB2中這個(gè)函數(shù) 名稱為LENGTH, 109 -- 而在MSSQLServer中這個(gè)函數(shù)的名稱則為LEN 110 select ProductID,ProductName,LEN(ProductName) as ProductNameLen from Products; 111 112 --主流系統(tǒng)都提供了取得字符串的子串的函數(shù),在MYSQL、MSSQLServer中這個(gè)函數(shù)名稱 為SUBSTRING, 113 --而在Oracle、DB2這個(gè)函數(shù)名稱為SUBSTR。 114 --這個(gè)函數(shù)接受三個(gè)參數(shù),第一個(gè) 參數(shù)為要取的主字符串,第二個(gè)參數(shù)為字串的起始位置(從1開始計(jì)數(shù)),第三個(gè)參數(shù)為字串 的長度 115 --注意在數(shù)據(jù)庫中Start的index索引是從1開始的 116 select ProductID,SUBSTRING(ProductName,1,3)as 'SubProductName' from dbo.Products; 117 118 --主流系統(tǒng)都提供了計(jì)算正弦函數(shù)值的函數(shù)SIN和計(jì)算絕對值的函數(shù)ABS,它們都接受一個(gè)數(shù)值類型的參數(shù) 119 select ProductID,SIN(UnitPrice) SInPrice from dbo.Products; 120 select ProductID,UnitPrice,ABS(UnitPrice) AbsPrice,SIN(UnitPrice) as SInPrice from dbo.Products 121 122 --拼接字符串 123 select '產(chǎn)品ID為:'+CONVERT(varchar,ProductID)+'的產(chǎn)品名稱為:'+ProductName as Description from dbo.Products 124 125 --不從實(shí)體表中取的數(shù)據(jù) 有的時(shí)候我們需要查詢一些不能從任何實(shí)體表中能夠取得的數(shù)據(jù), 126 --比如將數(shù)字1作為結(jié)果集或者計(jì)算字符串“abc”的長度 127 select distinct 1 as '1' from Products; 128 --MYSQL和MSSQLServer允許使用不帶FROM子句的SELECT語句來查詢這些不屬于任何實(shí) 體表的數(shù)據(jù),比如下面的SQL將1作為結(jié)果集 129 select 1 as '1'; 130 select LEN('abc'); 131 SELECT 1,2,3,'a','b','c'; 132 133 --求打印出打印5以內(nèi)自然數(shù)以及它們的平方數(shù) 134 SELECT 1 as '序號',1 * 1 as '平方數(shù)' 135 UNION SELECT 2,2 * 2 136 UNION SELECT 3,3 * 3 137 UNION SELECT 4,4 * 4 138 UNION SELECT 5,5 * 5 ; 139 140 -- 分別列出所有的正式員工和所有的臨時(shí)工的姓名 141 select '正式員工' 142 UNION ALL 143 select LastName from dbo.emp 144 union all 145 select '臨時(shí)工' 146 union all 147 select LastName from dbo.Employees; 148 149 CREATE TABLE T_Person (FIdNumber VARCHAR(20), FName VARCHAR(20),FBirthDay DATETIME, FRegDay DATETIME,FWeight NUMERIC(10,2)) 150 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789120','Tom','1981-03-22','1998-05-01',56.67); 151 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789121','Jim','1987-01-18','1999-08-21',36.17); 152 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789122','Lily','1987-11-08','2001-09-18',40.33); 153 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789123','Kelly','1982-07-12','2000-03-01',46.23); 154 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789124','Sam','1983-02-16','1998-05-01',48.68); 155 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789125','Kerry','1984-08-07','1999-03-01',66.67); 156 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789126','Smith','1980-01-09','2002-09-23',51.28); 157 INSERT INTO T_Person(FIdNumber,FName,FBirthDay,FRegDay,FWeight) VALUES ('123456789127','BillGates','1972-07-18','1995-06-19',60.32); 158 159 select * from T_Person 160 161 162 --一般用 Date 來表示日期類型 163 --一般用 Time 來表示時(shí)間類型 164 -- 在數(shù)據(jù)庫中, 一般用 DateTime 來表示日期時(shí)間類型 165 --一般用 TimeStamp 來表示日期時(shí)間類型 166 167 --獲取當(dāng)前時(shí)間 168 select GETDATE() as '當(dāng)前日期時(shí)間'; 169 170 --當(dāng)前日期 171 select CONVERT(varchar(50),GETDATE(),101) as '當(dāng)前日期'; 172 173 --當(dāng)前時(shí)間 174 select CONVERT(varchar(50),GETDATE(),108) as '當(dāng)前時(shí)間'; 175 176 177 --取值 別名 說明 178 --year yy,yyyy 年份 179 --quarter qq,q 季度 180 --month mm,m 月份 181 --dayofyear dy,y 當(dāng)年度的第幾天 182 --day dd,d 日 183 --week wk,ww 當(dāng)年度的第幾周 184 --weekday dw,w 星期幾 185 --hour hh 小時(shí) 186 --minute mi,n 分 187 --second ss,s 秒 188 --millisecond ms 毫秒 189 190 --在當(dāng)前日期上加兩天 191 select DATEADD(DAY,2,GETDATE()); 192 select CONVERT(varchar(50),(select DATEADD(DAY,2,GETDATE())),101); 193 194 --當(dāng)前時(shí)間的下一個(gè)星期 195 select DATEADD(week,1,getdate()); 196 197 --當(dāng)前時(shí)間的上一個(gè)月 198 select DATEADD(MONTH,-1,getdate()); 199 200 --DATEDIFF()函數(shù)用于計(jì)算兩個(gè)日期之間的差額 201 202 --計(jì)算月份差 203 select DATEDIFF(month,getdate(),(select dateadd(month,2,getdate()))) as '計(jì)算月份差'; 204 205 --DATENAME()函數(shù),這個(gè)函數(shù)可以返回一個(gè)日期的特定部分,并且 盡量用名稱來表述這個(gè)特定部分, 206 --其參數(shù)格式如下: DATENAME(datepart,date) 其中參數(shù)date為待計(jì)算日期, 207 --date 參數(shù)也可以是日期格式的字符串;參數(shù)datepart指定 要返回的日期部分的參數(shù) 208 209 --今天是星期幾 210 select DATENAME(dw,getdate()); 211 212 --當(dāng)前年份 213 select DATENAME(YY,GETDATE()) as '當(dāng)前年份'; 214 215 --獲取當(dāng)年度的第幾天 216 select '今天是'+DATENAME(YYYY,GETDATE())+'年第: '+ DATENAME(DAYOFYEAR,GETDATE())+'天' as '當(dāng)年度的第幾天 '; 217 218 select GETDATE() as '當(dāng)前日期', 219 DATENAME(YY,(select getdate())) as '年', 220 DATENAME(MONTH,(select getdate())) as '月', 221 DATENAME(DAY,(select GETDATE())) as '日', 222 DATENAME(HH,(select GETDATE())) as '小時(shí)', 223 DATENAME(MM,(select getdate())) as '分鐘', 224 DATENAME(S,(select GETDATE())) as '秒', 225 DATENAME(MS,(select GETDATE())) as '毫秒'; 226 227 228 --DATEPART()函數(shù)和DATENAME()函數(shù)完全一樣,不過其實(shí)它們并不是只是名稱不同的別名函數(shù), 229 --雖然都是用來提取日期的特定部分的,不過DATEPART()函數(shù)的返回值是數(shù)字而DATENAME()函數(shù)則會(huì)將盡可能的以名稱的方式做為返回值 230 231 select DATEPART(YY,(select getdate())); 232 233 --類型轉(zhuǎn)換 類型轉(zhuǎn)換 234 SELECT CAST('-30' AS INTEGER) as i, 235 CONVERT(DECIMAL,'3.1415726') as d, 236 CONVERT(DATETIME,'2008-08-08 08:09:10') as dt; 237 238 select RIGHT('123456789120',3) as '后三位', 239 CAST(RIGHT('123456789120',3) as integer) as '后三位轉(zhuǎn)化為整數(shù)類型', 240 CAST(RIGHT('123456789120',3) as integer)+1 as '后三位加1', 241 CONVERT(integer,RIGHT('123456789120',3))/2 as '后三位除以2'; 242 243 --空值驗(yàn)證 244 --COALESCE的簡寫版本ISNULL 245 select ShipRegion,ISNULL(ShipRegion,'為空') from Orders; 246 247 --case when 函數(shù) 248 --第一種用法 249 select OrderID, 250 (case ShipVia 251 when 1 then 'good' 252 when 2 then 'ok' 253 when 3 then 'no' 254 else 'Error' 255 end 256 ) as orderinfo 257 from Orders; 258 --第二種用法 259 select OrderID, 260 ( 261 case when ShipPostalCode<'100 ' then 'no' 262 when ShipPostalCode <'1000' then 'number' 263 else 'ok' 264 end)as ShipPostInfo from Orders;
?
轉(zhuǎn)載于:https://www.cnblogs.com/jesn/p/Sqlserver.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的SqlServer学习笔记【暂】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb系列教程
- 下一篇: [转载] 七龙珠第一部——第130话 悟