SqlServer学习笔记【暂】
生活随笔
收集整理的這篇文章主要介紹了
SqlServer学习笔记【暂】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Sql學習筆記,暫時先保存在著,等不忙了再整理成章節,如果其中有問題的,還請各位大神不吝賜教!
1 --------------------------------------所有的數據基于Northwind庫--------------------------- 2 3 --Order by 支持多個排序 4 select * from dbo.Employees order by EmployeeID asc,TitleOfCourtesy desc,BirthDate asc; 5 6 --Title中包含es的所有數據 7 select * from dbo.Employees where Title like '%es%'; 8 9 --Title中倒數第二個字符為v,最后一個字符任意 10 select * from dbo.Employees where Title like '%v_'; 11 12 --集合匹配只在 MSSQLServer 上提供支持,在 MYSQL、Oracle、DB2 等數據庫中不支持, 必須采用變通的手段來實現。 13 --查詢LastName中以d或者s開頭的數據 14 select * from dbo.Employees where LastName like '[ds]%';
15 --在其他的數據庫中我們可以變通的設置下[這個就是通用的sql了] 16 select * from dbo.Employees where LastName like 'd%' or LastName like 's%' 17 18 --否定符^來對集合取反,它匹配不與字符集中任意一個字符相匹配的字符 19 --查詢LastName中所有不以d或者s開頭的數據 20 select * from dbo.Employees where LastName like '[^ds]%';
21 --變為通用的sql 22 select * from dbo.Employees where not(LastName like 'd%') And not(LastName like 's%'); 23 24 -- 通配符過濾一個非常強大的功能,不 過 在使 用通配符過濾進行檢索的時候,數據庫系統 會對全表進行掃描,所以執行速度非常慢。 25 --因此不要過分使用通配符過濾,在使用其他方式 可以實現的效果的時候就應該避免使用通配符過濾 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 -- 反義運算符 34 -- “=”、“<”、“>”等運算符都是用來進行數值判斷的,有的時候則會想使用這些運算符 的反義 35 --查詢Extension不大于2300的數據; 36 select * from dbo.Employees where Extension !>2300; 37 38 --通用Sql的反義運算符 不等于<> 不大于<= 不小于>= 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之間的數據 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 --數據分組 57 --需要注意的是GROUP BY子句的位置,GROUP BY子句必須放到SELECT語句的之后, 58 --如果 SELECT語句有WHERE子句,則GROUP BY子句必須放到WHERE語句的之后。 59 60 select EmployeeID from dbo.Orders group by EmployeeID; 61 62 --分組函數和聚合函數聯合使用 63 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID; 64 65 --首先根據EmployeeID分組,再根據OrderID分組 66 select EmployeeID,OrderID from dbo.Orders group by EmployeeID,OrderID; 67 68 --分組函數,聚合函數以及排序功能混合使用 69 select EmployeeID,ShipVia,COUNT(*) OrderCount from dbo.Orders group by EmployeeID,ShipVia order by ShipVia,EmployeeID; 70 71 72 --HAVING條件過濾 73 --根據EmployeeID分組,查詢分組總數大于100的ID 74 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*)>100; 75 76 --having過濾條件和in聯合使用 77 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*) in(123,96,72) 78 79 --HAVING語句能夠使用的語法和WHERE幾乎是一樣的,不過使用WHERE的時候,GROUP BY 子句要位于WHERE子句之后, 80 --而使用HAVING子句的時候,GROUP BY子句要位于HAVING子句之前 81 82 83 --ROW_NUMBER OVER(排序規則) 84 select ROW_NUMBER() over(order by orderid) id, OrderID,EmployeeID,ShipVia from Orders; 85 86 87 --查詢第3行到第10行的數據[子查詢] 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去重復數據 98 select distinct EmployeeID from Orders; 99 100 --常量字段 也稱為‘常量值’ 并沒有什么實際的意義 101 select '產品訂單' as 'name',* from dbo.Orders ; 102 103 --字段間計算 [可用于select,insert,update,where等條件中] 104 select OrderID,(ShipVia*Freight) as Price from dbo.Orders; 105 106 --數據處理函數 107 108 ---主流數據庫系統都提供了計算字符串長度的函數,在MYSQL、Oracle、DB2中這個函數 名稱為LENGTH, 109 -- 而在MSSQLServer中這個函數的名稱則為LEN 110 select ProductID,ProductName,LEN(ProductName) as ProductNameLen from Products; 111 112 --主流系統都提供了取得字符串的子串的函數,在MYSQL、MSSQLServer中這個函數名稱 為SUBSTRING, 113 --而在Oracle、DB2這個函數名稱為SUBSTR。 114 --這個函數接受三個參數,第一個 參數為要取的主字符串,第二個參數為字串的起始位置(從1開始計數),第三個參數為字串 的長度 115 --注意在數據庫中Start的index索引是從1開始的 116 select ProductID,SUBSTRING(ProductName,1,3)as 'SubProductName' from dbo.Products; 117 118 --主流系統都提供了計算正弦函數值的函數SIN和計算絕對值的函數ABS,它們都接受一個數值類型的參數 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 '產品ID為:'+CONVERT(varchar,ProductID)+'的產品名稱為:'+ProductName as Description from dbo.Products 124 125 --不從實體表中取的數據 有的時候我們需要查詢一些不能從任何實體表中能夠取得的數據, 126 --比如將數字1作為結果集或者計算字符串“abc”的長度 127 select distinct 1 as '1' from Products; 128 --MYSQL和MSSQLServer允許使用不帶FROM子句的SELECT語句來查詢這些不屬于任何實 體表的數據,比如下面的SQL將1作為結果集 129 select 1 as '1'; 130 select LEN('abc'); 131 SELECT 1,2,3,'a','b','c'; 132 133 --求打印出打印5以內自然數以及它們的平方數 134 SELECT 1 as '序號',1 * 1 as '平方數' 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 -- 分別列出所有的正式員工和所有的臨時工的姓名 141 select '正式員工' 142 UNION ALL 143 select LastName from dbo.emp 144 union all 145 select '臨時工' 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 來表示時間類型 164 -- 在數據庫中, 一般用 DateTime 來表示日期時間類型 165 --一般用 TimeStamp 來表示日期時間類型 166 167 --獲取當前時間 168 select GETDATE() as '當前日期時間'; 169 170 --當前日期 171 select CONVERT(varchar(50),GETDATE(),101) as '當前日期'; 172 173 --當前時間 174 select CONVERT(varchar(50),GETDATE(),108) as '當前時間'; 175 176 177 --取值 別名 說明 178 --year yy,yyyy 年份 179 --quarter qq,q 季度 180 --month mm,m 月份 181 --dayofyear dy,y 當年度的第幾天 182 --day dd,d 日 183 --week wk,ww 當年度的第幾周 184 --weekday dw,w 星期幾 185 --hour hh 小時 186 --minute mi,n 分 187 --second ss,s 秒 188 --millisecond ms 毫秒 189 190 --在當前日期上加兩天 191 select DATEADD(DAY,2,GETDATE()); 192 select CONVERT(varchar(50),(select DATEADD(DAY,2,GETDATE())),101); 193 194 --當前時間的下一個星期 195 select DATEADD(week,1,getdate()); 196 197 --當前時間的上一個月 198 select DATEADD(MONTH,-1,getdate()); 199 200 --DATEDIFF()函數用于計算兩個日期之間的差額 201 202 --計算月份差 203 select DATEDIFF(month,getdate(),(select dateadd(month,2,getdate()))) as '計算月份差'; 204 205 --DATENAME()函數,這個函數可以返回一個日期的特定部分,并且 盡量用名稱來表述這個特定部分, 206 --其參數格式如下: DATENAME(datepart,date) 其中參數date為待計算日期, 207 --date 參數也可以是日期格式的字符串;參數datepart指定 要返回的日期部分的參數 208 209 --今天是星期幾 210 select DATENAME(dw,getdate()); 211 212 --當前年份 213 select DATENAME(YY,GETDATE()) as '當前年份'; 214 215 --獲取當年度的第幾天 216 select '今天是'+DATENAME(YYYY,GETDATE())+'年第: '+ DATENAME(DAYOFYEAR,GETDATE())+'天' as '當年度的第幾天 '; 217 218 select GETDATE() as '當前日期', 219 DATENAME(YY,(select getdate())) as '年', 220 DATENAME(MONTH,(select getdate())) as '月', 221 DATENAME(DAY,(select GETDATE())) as '日', 222 DATENAME(HH,(select GETDATE())) as '小時', 223 DATENAME(MM,(select getdate())) as '分鐘', 224 DATENAME(S,(select GETDATE())) as '秒', 225 DATENAME(MS,(select GETDATE())) as '毫秒'; 226 227 228 --DATEPART()函數和DATENAME()函數完全一樣,不過其實它們并不是只是名稱不同的別名函數, 229 --雖然都是用來提取日期的特定部分的,不過DATEPART()函數的返回值是數字而DATENAME()函數則會將盡可能的以名稱的方式做為返回值 230 231 select DATEPART(YY,(select getdate())); 232 233 --類型轉換 類型轉換 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 '后三位轉化為整數類型', 240 CAST(RIGHT('123456789120',3) as integer)+1 as '后三位加1', 241 CONVERT(integer,RIGHT('123456789120',3))/2 as '后三位除以2'; 242 243 --空值驗證 244 --COALESCE的簡寫版本ISNULL 245 select ShipRegion,ISNULL(ShipRegion,'為空') from Orders; 246 247 --case when 函數 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 --------------------------------------所有的數據基于Northwind庫--------------------------- 2 3 --Order by 支持多個排序 4 select * from dbo.Employees order by EmployeeID asc,TitleOfCourtesy desc,BirthDate asc; 5 6 --Title中包含es的所有數據 7 select * from dbo.Employees where Title like '%es%'; 8 9 --Title中倒數第二個字符為v,最后一個字符任意 10 select * from dbo.Employees where Title like '%v_'; 11 12 --集合匹配只在 MSSQLServer 上提供支持,在 MYSQL、Oracle、DB2 等數據庫中不支持, 必須采用變通的手段來實現。 13 --查詢LastName中以d或者s開頭的數據 14 select * from dbo.Employees where LastName like '[ds]%';
15 --在其他的數據庫中我們可以變通的設置下[這個就是通用的sql了] 16 select * from dbo.Employees where LastName like 'd%' or LastName like 's%' 17 18 --否定符^來對集合取反,它匹配不與字符集中任意一個字符相匹配的字符 19 --查詢LastName中所有不以d或者s開頭的數據 20 select * from dbo.Employees where LastName like '[^ds]%';
21 --變為通用的sql 22 select * from dbo.Employees where not(LastName like 'd%') And not(LastName like 's%'); 23 24 -- 通配符過濾一個非常強大的功能,不 過 在使 用通配符過濾進行檢索的時候,數據庫系統 會對全表進行掃描,所以執行速度非常慢。 25 --因此不要過分使用通配符過濾,在使用其他方式 可以實現的效果的時候就應該避免使用通配符過濾 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 -- 反義運算符 34 -- “=”、“<”、“>”等運算符都是用來進行數值判斷的,有的時候則會想使用這些運算符 的反義 35 --查詢Extension不大于2300的數據; 36 select * from dbo.Employees where Extension !>2300; 37 38 --通用Sql的反義運算符 不等于<> 不大于<= 不小于>= 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之間的數據 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 --數據分組 57 --需要注意的是GROUP BY子句的位置,GROUP BY子句必須放到SELECT語句的之后, 58 --如果 SELECT語句有WHERE子句,則GROUP BY子句必須放到WHERE語句的之后。 59 60 select EmployeeID from dbo.Orders group by EmployeeID; 61 62 --分組函數和聚合函數聯合使用 63 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID; 64 65 --首先根據EmployeeID分組,再根據OrderID分組 66 select EmployeeID,OrderID from dbo.Orders group by EmployeeID,OrderID; 67 68 --分組函數,聚合函數以及排序功能混合使用 69 select EmployeeID,ShipVia,COUNT(*) OrderCount from dbo.Orders group by EmployeeID,ShipVia order by ShipVia,EmployeeID; 70 71 72 --HAVING條件過濾 73 --根據EmployeeID分組,查詢分組總數大于100的ID 74 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*)>100; 75 76 --having過濾條件和in聯合使用 77 select EmployeeID,COUNT(*) as a from dbo.Orders group by EmployeeID having COUNT(*) in(123,96,72) 78 79 --HAVING語句能夠使用的語法和WHERE幾乎是一樣的,不過使用WHERE的時候,GROUP BY 子句要位于WHERE子句之后, 80 --而使用HAVING子句的時候,GROUP BY子句要位于HAVING子句之前 81 82 83 --ROW_NUMBER OVER(排序規則) 84 select ROW_NUMBER() over(order by orderid) id, OrderID,EmployeeID,ShipVia from Orders; 85 86 87 --查詢第3行到第10行的數據[子查詢] 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去重復數據 98 select distinct EmployeeID from Orders; 99 100 --常量字段 也稱為‘常量值’ 并沒有什么實際的意義 101 select '產品訂單' as 'name',* from dbo.Orders ; 102 103 --字段間計算 [可用于select,insert,update,where等條件中] 104 select OrderID,(ShipVia*Freight) as Price from dbo.Orders; 105 106 --數據處理函數 107 108 ---主流數據庫系統都提供了計算字符串長度的函數,在MYSQL、Oracle、DB2中這個函數 名稱為LENGTH, 109 -- 而在MSSQLServer中這個函數的名稱則為LEN 110 select ProductID,ProductName,LEN(ProductName) as ProductNameLen from Products; 111 112 --主流系統都提供了取得字符串的子串的函數,在MYSQL、MSSQLServer中這個函數名稱 為SUBSTRING, 113 --而在Oracle、DB2這個函數名稱為SUBSTR。 114 --這個函數接受三個參數,第一個 參數為要取的主字符串,第二個參數為字串的起始位置(從1開始計數),第三個參數為字串 的長度 115 --注意在數據庫中Start的index索引是從1開始的 116 select ProductID,SUBSTRING(ProductName,1,3)as 'SubProductName' from dbo.Products; 117 118 --主流系統都提供了計算正弦函數值的函數SIN和計算絕對值的函數ABS,它們都接受一個數值類型的參數 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 '產品ID為:'+CONVERT(varchar,ProductID)+'的產品名稱為:'+ProductName as Description from dbo.Products 124 125 --不從實體表中取的數據 有的時候我們需要查詢一些不能從任何實體表中能夠取得的數據, 126 --比如將數字1作為結果集或者計算字符串“abc”的長度 127 select distinct 1 as '1' from Products; 128 --MYSQL和MSSQLServer允許使用不帶FROM子句的SELECT語句來查詢這些不屬于任何實 體表的數據,比如下面的SQL將1作為結果集 129 select 1 as '1'; 130 select LEN('abc'); 131 SELECT 1,2,3,'a','b','c'; 132 133 --求打印出打印5以內自然數以及它們的平方數 134 SELECT 1 as '序號',1 * 1 as '平方數' 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 -- 分別列出所有的正式員工和所有的臨時工的姓名 141 select '正式員工' 142 UNION ALL 143 select LastName from dbo.emp 144 union all 145 select '臨時工' 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 來表示時間類型 164 -- 在數據庫中, 一般用 DateTime 來表示日期時間類型 165 --一般用 TimeStamp 來表示日期時間類型 166 167 --獲取當前時間 168 select GETDATE() as '當前日期時間'; 169 170 --當前日期 171 select CONVERT(varchar(50),GETDATE(),101) as '當前日期'; 172 173 --當前時間 174 select CONVERT(varchar(50),GETDATE(),108) as '當前時間'; 175 176 177 --取值 別名 說明 178 --year yy,yyyy 年份 179 --quarter qq,q 季度 180 --month mm,m 月份 181 --dayofyear dy,y 當年度的第幾天 182 --day dd,d 日 183 --week wk,ww 當年度的第幾周 184 --weekday dw,w 星期幾 185 --hour hh 小時 186 --minute mi,n 分 187 --second ss,s 秒 188 --millisecond ms 毫秒 189 190 --在當前日期上加兩天 191 select DATEADD(DAY,2,GETDATE()); 192 select CONVERT(varchar(50),(select DATEADD(DAY,2,GETDATE())),101); 193 194 --當前時間的下一個星期 195 select DATEADD(week,1,getdate()); 196 197 --當前時間的上一個月 198 select DATEADD(MONTH,-1,getdate()); 199 200 --DATEDIFF()函數用于計算兩個日期之間的差額 201 202 --計算月份差 203 select DATEDIFF(month,getdate(),(select dateadd(month,2,getdate()))) as '計算月份差'; 204 205 --DATENAME()函數,這個函數可以返回一個日期的特定部分,并且 盡量用名稱來表述這個特定部分, 206 --其參數格式如下: DATENAME(datepart,date) 其中參數date為待計算日期, 207 --date 參數也可以是日期格式的字符串;參數datepart指定 要返回的日期部分的參數 208 209 --今天是星期幾 210 select DATENAME(dw,getdate()); 211 212 --當前年份 213 select DATENAME(YY,GETDATE()) as '當前年份'; 214 215 --獲取當年度的第幾天 216 select '今天是'+DATENAME(YYYY,GETDATE())+'年第: '+ DATENAME(DAYOFYEAR,GETDATE())+'天' as '當年度的第幾天 '; 217 218 select GETDATE() as '當前日期', 219 DATENAME(YY,(select getdate())) as '年', 220 DATENAME(MONTH,(select getdate())) as '月', 221 DATENAME(DAY,(select GETDATE())) as '日', 222 DATENAME(HH,(select GETDATE())) as '小時', 223 DATENAME(MM,(select getdate())) as '分鐘', 224 DATENAME(S,(select GETDATE())) as '秒', 225 DATENAME(MS,(select GETDATE())) as '毫秒'; 226 227 228 --DATEPART()函數和DATENAME()函數完全一樣,不過其實它們并不是只是名稱不同的別名函數, 229 --雖然都是用來提取日期的特定部分的,不過DATEPART()函數的返回值是數字而DATENAME()函數則會將盡可能的以名稱的方式做為返回值 230 231 select DATEPART(YY,(select getdate())); 232 233 --類型轉換 類型轉換 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 '后三位轉化為整數類型', 240 CAST(RIGHT('123456789120',3) as integer)+1 as '后三位加1', 241 CONVERT(integer,RIGHT('123456789120',3))/2 as '后三位除以2'; 242 243 --空值驗證 244 --COALESCE的簡寫版本ISNULL 245 select ShipRegion,ISNULL(ShipRegion,'為空') from Orders; 246 247 --case when 函數 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;
?
轉載于:https://www.cnblogs.com/jesn/p/Sqlserver.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SqlServer学习笔记【暂】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb系列教程
- 下一篇: [转载] 七龙珠第一部——第130话 悟