SQL 進階(10) 函數,sql10函數
SQL 進階(10) 函數SQL GROUP BY 語句 GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 文法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name
SQL GROUP BY 執行個體
我們擁有下面這個 "Orders" 表:
O_Id |
OrderDate |
OrderPrice |
Customer |
1 |
2008/12/29 |
1000 |
Bush |
2 |
2008/11/23 |
1600 |
Carter |
3 |
2008/10/05 |
700 |
Bush |
4 |
2008/09/28 |
300 |
Bush |
5 |
2008/08/06 |
2000 |
Adams |
6 |
2008/07/21 |
100 |
Carter |
現在,我們希望尋找每個客戶的總金額(總訂單)。
我們想要使用 GROUP BY 語句對客戶進行組合。
SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY Customer
結果集類似這樣:
Customer |
SUM(OrderPrice) |
Bush |
2000 |
Carter |
1700 |
Adams |
2000 |
讓我們看一下如果省略 GROUP BY 會出現什麼情況:
SELECT Customer,SUM(OrderPrice) FROM Orders
結果集類似這樣:
Customer |
SUM(OrderPrice) |
Bush |
5700 |
Carter |
5700 |
Bush |
5700 |
Bush |
5700 |
Adams |
5700 |
Carter |
5700 |
GROUP BY 一個以上的列
我們也可以對一個以上的列應用 GROUP BY 語句,就像這樣:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate
SQL HAVING 子句HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。
SQL HAVING 文法
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value
SQL HAVING 執行個體 我們擁有下面這個 "Orders" 表:
O_Id |
OrderDate |
OrderPrice |
Customer |
1 |
2008/12/29 |
1000 |
Bush |
2 |
2008/11/23 |
1600 |
Carter |
3 |
2008/10/05 |
700 |
Bush |
4 |
2008/09/28 |
300 |
Bush |
5 |
2008/08/06 |
2000 |
Adams |
6 |
2008/07/21 |
100 |
Carter |
現在,我們希望尋找訂單總金額少於 2000 的客戶。
SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000
結果集類似:
Customer |
SUM(OrderPrice) |
Carter |
1700 |
現在我們希望尋找客戶 "Bush" 或 "Adams" 擁有超過 1500 的訂單總金額。
我們在 SQL 陳述式中增加了一個普通的 WHERE 子句:
SELECT Customer,SUM(OrderPrice) FROM OrdersWHERE Customer='Bush' OR Customer='Adams'GROUP BY CustomerHAVING SUM(OrderPrice)>1500
結果集:
Customer |
SUM(OrderPrice) |
Bush |
2000 |
Adams |
2000 |
SQL UCASE() 函數SQL UCASE() 文法
SELECT UCASE(column_name) FROM table_name
SQL UCASE() 執行個體
我們擁有下面這個 "Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
現在,我們希望選取 "LastName" 和 "FirstName" 列的內容,然後把 "LastName" 列轉換為大寫。
SELECT UCASE(LastName) as LastName,FirstName FROM Persons
結果集類似這樣:
LastName |
FirstName |
ADAMS |
John |
BUSH |
George |
CARTER |
Thomas |
SQL LCASE() 函數SQL LCASE() 文法
SELECT LCASE(column_name) FROM table_name
SQL LCASE() 執行個體
我們擁有下面這個 "Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
現在,我們希望選取 "LastName" 和 "FirstName" 列的內容,然後把 "LastName" 列轉換為小寫。
SELECT LCASE(LastName) as LastName,FirstName FROM Persons
結果集類似這樣:
LastName |
FirstName |
adams |
John |
bush |
George |
carter |
Thomas |
SQL MID() 函數MID() 函數
MID 函數用於從文字欄位中提取字元。
SQL MID() 文法
SELECT MID(column_name,start[,length]) FROM table_name
參數 |
描述 |
column_name |
必需。要提取字元的欄位。 |
start |
必需。規定開始位置(起始值是 1)。 |
length |
可選。要返回的字元數。如果省略,則 MID() 函數返回剩餘文本。 |
SQL MID() 執行個體
我們擁有下面這個 "Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
現在,我們希望從 "City" 列中提取前 3 個字元。
SELECT MID(City,1,3) as SmallCity FROM Persons
結果集類似這樣:
SQL LEN() 函數LEN() 函數
LEN 函數返迴文本欄位中值的長度。
SQL LEN() 文法
SELECT LEN(column_name) FROM table_name
SQL LEN() 執行個體 我們擁有下面這個 "Persons" 表:
Id |
LastName |
FirstName |
Address |
City |
1 |
Adams |
John |
Oxford Street |
London |
2 |
Bush |
George |
Fifth Avenue |
New York |
3 |
Carter |
Thomas |
Changan Street |
Beijing |
現在,我們希望取得 "City" 列中值的長度。
SELECT LEN(City) as LengthOfAddress FROM Persons
結果集類似這樣:
SQL ROUND() 函數ROUND() 函數 ROUND 函數用於把數值欄位舍入為指定的小數位元。
SQL ROUND() 文法
SELECT ROUND(column_name,decimals) FROM table_name
參數 |
描述 |
column_name |
必需。要舍入的欄位。 |
decimals |
必需。規定要返回的小數位元。 |
SQL ROUND() 執行個體
我們擁有下面這個 "Products" 表:
Prod_Id |
ProductName |
Unit |
UnitPrice |
1 |
gold |
1000 g |
32.35 |
2 |
silver |
1000 g |
11.56 |
3 |
copper |
1000 g |
6.85 |
現在,我們希望把名稱和價格舍入為最接近的整數。
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
結果集類似這樣:
ProductName |
UnitPrice |
gold |
32 |
silver |
12 |
copper |
7 |
SQL NOW() 函數NOW() 函數
NOW 函數返回當前的日期和時間。
SQL NOW() 文法
SELECT NOW() FROM table_name
SQL NOW() 執行個體
我們擁有下面這個 "Products" 表:
Prod_Id |
ProductName |
Unit |
UnitPrice |
1 |
gold |
1000 g |
32.35 |
2 |
silver |
1000 g |
11.56 |
3 |
copper |
1000 g |
6.85 |
現在,我們希望顯示當天的日期所對應的名稱和價格。
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
結果集類似這樣:
ProductName |
UnitPrice |
PerDate |
gold |
32.35 |
12/29/2008 11:36:05 AM |
silver |
11.56 |
12/29/2008 11:36:05 AM |
copper |
6.85 |
12/29/2008 11:36:05 AM |
SQL FORMAT() 函數FORMAT() 函數 FORMAT 函數用於對欄位的顯示進行格式化。
SQL FORMAT() 文法
SELECT FORMAT(column_name,format) FROM table_name
參數 |
描述 |
column_name |
必需。要格式化的欄位。 |
format |
必需。規定格式。 |
SQL FORMAT() 執行個體
我們擁有下面這個 "Products" 表:
Prod_Id |
ProductName |
Unit |
UnitPrice |
1 |
gold |
1000 g |
32.35 |
2 |
silver |
1000 g |
11.56 |
3 |
copper |
1000 g |
6.85 |
現在,我們希望顯示每天日期所對應的名稱和價格(日期的顯示格式是 "YYYY-MM-DD")。
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDateFROM Products
結果集類似這樣:
ProductName |
UnitPrice |
PerDate |
gold |
32.35 |
12/29/2008 |
silver |
11.56 |
12/29/2008 |
copper |
6.85 |
12/29/2008 |
常用的sql函數
1.isnull() 空記錄操作
2.getdate() 擷取目前時間
3.convert() 類型轉換
4.dateadd() 日期增加
5.datediff() 日期差
6.substring() 取字串
7.replace() 字串替換
8.left(),right() 取左右子字串
9.LTrim(),RTrim() 去字串左右空格
10.STR(),int() 類型轉換
SQL擷取時間函數convert(varchar(10),getdate(),111)
select convert(varchar(10),getdate(),111)
結果應該是2012/10/25 後面不帶 00:00:00的
你看到了00:00:00是因為你把這個值插入了一個datatime列裡面,後面的是自動補上的。