SQL 進階(9) 函數,sql函數
SQL 進階(9) 函數函數的文法 內建 SQL 函數的文法是:
SELECT function(列) FROM 表
函數的類型 在 SQL 中,基本的函數類型和種類有若干種。函數的基本類型是:
合計函數(Aggregate functions) Aggregate 函數的操作面向一系列的值,並返回一個單一的值。
注釋:如果在 SELECT 語句的項目列表中的眾多其它運算式中使用 SELECT 語句,則這個 SELECT 必須使用 GROUP BY 語句!
"Persons" table (在大部分的例子中使用過)
Name |
Age |
Adams, John |
38 |
Bush, George |
33 |
Carter, Thomas |
28 |
在 SQL Server 中的合計函數
函數 |
描述 |
AVG(column) |
返回某列的行數 |
BINARY_CHECKSUM |
|
CHECKSUM |
|
CHECKSUM_AGG |
|
COUNT(column) |
返回某列的行數(不包括NULL值) |
COUNT(*) |
返回被選行數 |
COUNT(DISTINCT column) |
返回相異結果的數目 |
FIRST(column) |
返回在指定的域中第一個記錄的值(SQLServer2000 不支援) |
LAST(column) |
返回在指定的域中最後一個記錄的值(SQLServer2000 不支援) |
MAX(column) |
返回某列的最高值 |
MIN(column) |
返回某列的最低值 |
STDEV(column) |
|
STDEVP(column) |
|
SUM(column) |
返回某列的總和 |
VAR(column) |
|
VARP(column) |
|
Scalar 函數
Scalar 函數的操作面向某個單一的值,並返回基於輸入值的一個單一的值。
SQL AVG 函數定義和用法 AVG 函數返回數值列的平均值。NULL 值不包括在計算中。
SQL AVG() 文法
SELECT AVG(column_name) FROM table_name
SQL AVG() 執行個體 我們擁有下面這個 "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 |
現在,我們希望計算 "OrderPrice" 欄位的平均值。
我們使用如下 SQL 陳述式:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
結果集類似這樣:
現在,我們希望找到 OrderPrice 值高於 OrderPrice 平均值的客戶。
SELECT Customer FROM OrdersWHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
結果集類似這樣:
Customer |
Bush |
Carter |
Adams |
SQL COUNT() 文法SQL COUNT(column_name) 文法
COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):
SELECT COUNT(column_name) FROM table_name
SQL COUNT(*)文法
COUNT(*) 函數返回表中的記錄數:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 文法
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:
SELECT COUNT(DISTINCT column_name) FROM table_name
注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。
SQL COUNT(column_name) 執行個體
我們擁有下列 "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 |
現在,我們希望計算客戶 "Carter" 的訂單數。
SELECT COUNT(Customer) AS CustomerNilsen FROM OrdersWHERE Customer='Carter'
以上 SQL 陳述式的結果是 2,因為客戶 Carter 共有 2 個訂單:
SQL COUNT(*) 執行個體
如果我們省略 WHERE 子句,比如這樣:
SELECT COUNT(*) AS NumberOfOrders FROM Orders
結果集類似這樣:
SQL COUNT(DISTINCT column_name) 執行個體
現在,我們希望計算 "Orders" 表中不同客戶的數目。
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
結果集類似這樣:
FIRST() 函數 FIRST() 函數返回指定的欄位中第一個記錄的值。
提示:可使用 ORDER BY 語句對記錄進行排序。
SQL FIRST() 文法
SELECT FIRST(column_name) FROM table_name
SQL FIRST() 執行個體
我們擁有下面這個 "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 |
現在,我們希望尋找 "OrderPrice" 列的第一個值。
SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
結果集類似這樣:
LAST() 函數 LAST() 函數返回指定的欄位中最後一個記錄的值。
提示:可使用 ORDER BY 語句對記錄進行排序。
SQL LAST() 文法
SELECT LAST(column_name) FROM table_name
SQL LAST() 執行個體
我們擁有下面這個 "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 |
現在,我們希望尋找 "OrderPrice" 列的最後一個值。
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders
結果集類似這樣:
MAX() 函數 MAX 函數返回一列中的最大值。NULL 值不包括在計算中。
SQL MAX() 文法
SELECT MAX(column_name) FROM table_name
注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。SQL MAX() 執行個體
我們擁有下面這個 "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 |
現在,我們希望尋找 "OrderPrice" 列的最大值。
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
結果集類似這樣:
MIN() 函數 MIN 函數返回一列中的最小值。NULL 值不包括在計算中。
SQL MIN() 文法
SELECT MIN(column_name) FROM table_name
注釋:MIN 和 MAX 也可用於文本列,以獲得按字母順序排列的最高或最低值。
SQL MIN() 執行個體
我們擁有下面這個 "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 |
現在,我們希望尋找 "OrderPrice" 列的最小值。
SELECT MIN(OrderPrice) AS SmallestOrderPrice FROM Orders
結果集類似這樣:
SUM() 函數 SUM 函數返回數值列的總數(總額)。
SQL SUM() 文法
SELECT SUM(column_name) FROM table_name
SQL SUM() 執行個體
我們擁有下面這個 "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 |
現在,我們希望尋找 "OrderPrice" 欄位的總數。
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
結果集類似這樣:
SQL 有什函數? 越詳細越好
這種題上網一搜尋一大把,也用不著來這裡問
給你發點
1.絕對值
SQL:select abs(-1) value
O:select abs(-1) value from dual
2.取整(大)
S:select ceiling(-1.001) value
O:select ceil(-1.001) value from dual
3.取整(小)
S:select floor(-1.001) value
O:select floor(-1.001) value from dual
4.取整(截取)
S:select cast(-1.002 as int) value
O:select trunc(-1.002) value from dual
5.四捨五入
S:select round(1.23456,4) value 1.23460
O:select round(1.23456,4) value from dual 1.2346
6.e為底的冪
S:select Exp(1) value 2.7182818284590451
O:select Exp(1) value from dual 2.71828182
7.取e為底的對數
S:select log(2.7182818284590451) value 1
O:select ln(2.7182818284590451) value from dual; 1
8.取10為底對數
S:select log10(10) value 1
O:select log(10,10) value from dual; 1
9.取平方
S:select SQUARE(4) value 16
O:select power(4,2) value from dual 16
10.取平方根
S:select SQRT(4) value 2
O:select SQRT(4) value from dual 2
11.求任意數為底的冪
S:select power(3,4) value 81
O:select power(3,4) value from dual 81
12.取隨機數
S:select rand() value
O:select sys.dbms_random.value(0,1) value from dual;
13.取符號
S:select sign(-8) value -1
O:select sign(-8) value from dual -1
----------數學函數
14.圓周率
S:SELECT PI() value 3.1415926535897931
O:不知道
15.sin,cos,tan 參數都以弧度為單位
例如:select sin(PI()/2) value 得到1(SQLServer)
16.Asin,Acos,Atan,Atan2 返回弧度
17.弧度角度互換(SQLServer,Oracle不知道)
DEGREES:弧度-〉角度
RADIANS:角度-〉弧度
---------數值間比較
18. 求集合最大值
S:select max(value) value from
(select 1 value
union
select -2 value
union
select 4 value
union
select 3 value)a
O:sele......餘下全文>>
常用的sql函數
1.isnull() 空記錄操作
2.getdate() 擷取目前時間
3.convert() 類型轉換
4.dateadd() 日期增加
5.datediff() 日期差
6.substring() 取字串
7.replace() 字串替換
8.left(),right() 取左右子字串
9.LTrim(),RTrim() 去字串左右空格
10.STR(),int() 類型轉換