chap11 使用數(shù)據(jù)處理函數(shù)
11.1 函數(shù)
RTrim():去掉串尾空格
11.2 使用函數(shù)
- 理文本串
- 在數(shù)值數(shù)據(jù)上進(jìn)行算術(shù)操作
- 處理日期和時(shí)間并從這些值中提取特定成分(例如返回兩個(gè)日期之差瘸羡,檢查日期有效性等)的日期和時(shí)間函數(shù)
- 返回DBMS正使用的特殊信息
11.2.1 文本處理函數(shù)
為常用的文本處理函數(shù):
函數(shù) | 說明 |
---|---|
Left() | 返回串左邊的字符 |
Length() | 返回串的長(zhǎng)度 |
Locate() | 找出串的一個(gè)子串 |
LTrim() | 去掉串左邊的空格 |
Right() | 返回串右邊的字符 |
RTrim() | 去掉串右邊的空格 |
Soundex() | 返回串的Soundex值 |
SubString() | 返回子串的字符 |
Upper() | 將串轉(zhuǎn)換為大寫 |
解釋:SOUNDEX()函數(shù)是一個(gè)將任何文本串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法梗逮,使得能對(duì)串進(jìn)行發(fā)音比較而不是字母比較
舉例:customers表中有一個(gè)顧客Coyote Inc.,其聯(lián)系名為Y.Lee,但是輸入錯(cuò)誤寫為為Y.Lie,采用的方法:
SELECT customers.cust_name,customers.cust_contact FROM customers WHERE SOUNDEX(cust_contact)=SOUNDEX('Y Lie');
11.2.2 日期和時(shí)間處理函數(shù)
日期和時(shí)間采用相應(yīng)的數(shù)據(jù)類型和特殊的格式存儲(chǔ)忆植,以便能快速和有效地排序或過濾躲查,并且節(jié)省物理存儲(chǔ)空間颖系。
下表:常用日期和時(shí)間處理函數(shù)
函數(shù) | 說明 |
---|---|
AddDate() | 增加一個(gè)日期(天、周等) |
AddTime() | 增加一個(gè)時(shí)間(時(shí)、分等) |
CurTime() | 返回當(dāng)前時(shí)間 |
Date() | 返回日期時(shí)間的日期部分 |
DateDiff() | 計(jì)算兩個(gè)日期之差 |
Date_Add() | 高度靈活的日期運(yùn)算函數(shù) |
Date_Format() | 返回一個(gè)格式化的日期或時(shí)間串 |
Day() | 返回一個(gè)日期的天數(shù)部分 |
DayOfWeek() | 對(duì)于一個(gè)日期,返回對(duì)應(yīng)的星期幾 |
Hour() | 返回一個(gè)時(shí)間的小時(shí)部分 |
Minute() | 返回一個(gè)時(shí)間的分鐘部分 |
Month() | 返回一個(gè)日期的月份部分 |
Now() | 返回當(dāng)前日期和時(shí)間 |
Second() | 返回一個(gè)時(shí)間的秒部分 |
Time() | 返回一個(gè)日期時(shí)間的時(shí)間部分 |
Year() | 返回一個(gè)日期的年份部分 |
迄今為止判导,WHERE子句經(jīng)常過濾的部分為比較數(shù)值和文本,現(xiàn)在可以對(duì)日期進(jìn)行過濾
舉例:查詢出在2005-09-01這天下單的顧客編號(hào)以及下單的數(shù)量
SELECT customers.cust_id,orderitems.order_num FROM customers,orderitems,orders WHERE order_date='2005-09-01';
如果存儲(chǔ)的order_time值為2005-09-01 11:30:05沛硅,而WHERE order_date='2005-09-01'將檢索失敗
解決方法:使用Date()函數(shù)與部分列值進(jìn)行比較
舉例:
SELECT customers.cust_id,orderitems.order_num FROM customers,orderitems,orders WHERE DATE(orders.order_date)='2005-09-01'眼刃;
注:如果想要的是日期,請(qǐng)使用Date():如果想要的僅僅是日期摇肌,則使用該函數(shù)是一個(gè)良好的習(xí)慣擂红,即使知道相應(yīng)的列只包含日期也是如此。
也存在一個(gè)Time()函數(shù)围小,在只要想要時(shí)間時(shí)使用
如果想要檢出2005年9月下的所有訂單昵骤,簡(jiǎn)單的相等測(cè)試也不行,可以采用以下的方法:
方法一:
SELECT customers.cust_id,orderitems.order_num FROM customers,orderitems,orders WHERE DATE(orders.order_date) BETWEEN '2005-09-01' AND '2005-09-30';
方法二:
SELECT customers.cust_id,
orderitems.order_num
FROM customers,orderitems,orders
WHERE YEAR(orders.order_date)=2005 AND
MONTH(orders.order_date)=9;
11.2.3 數(shù)值處理函數(shù)
數(shù)值處理函數(shù)僅處理數(shù)值數(shù)據(jù)肯适,這些函數(shù)一般主要用于代數(shù)变秦、三角函數(shù)或幾何運(yùn)算,因此沒有串或日期-時(shí)間處理使用頻繁疹娶。
下表:常用數(shù)值處理函數(shù)
函數(shù) | 說明 |
---|---|
Abs() | 返回一個(gè)數(shù)的絕對(duì)值 |
Cos() | 返回一個(gè)角度的余弦 |
Exp() | 返回一個(gè)數(shù)的指數(shù)值 |
Mod() | 返回一個(gè)數(shù)的余數(shù) |
Pi() | 返回圓周率 |
Rand() | 返回一個(gè)隨機(jī)數(shù) |
Sin() | 返回一個(gè)角度的正弦 |
Sqrt() | 返回一個(gè)數(shù)的平方根 |
Tan() | 返回一個(gè)角度的正切 |
chap12 匯總數(shù)據(jù)
12.1 聚集函數(shù)
我們經(jīng)常需要匯總數(shù)據(jù)而不用把它們實(shí)際檢索出來伴栓,這種類型的檢索大概有以下幾種:
- 確定表中的行數(shù)
- 獲得表中行組的和
- 找出表列的最大值伦连、最小值和平均值
聚集函數(shù)(aggregate function):運(yùn)行在行組上雨饺,計(jì)算和返回單個(gè)值的函數(shù)
下表:SQL聚集函數(shù)
函數(shù) | 說明 |
---|---|
AVG() | 返回一個(gè)數(shù)的平均值 |
COUNT() | 返回某列的行數(shù) |
MAX() | 返回某列的最大值 |
MIN | 返回某列的最小值 |
SUM() | 返回某列值之和 |
12.1.1 AVG()函數(shù)
AVG()函數(shù)對(duì)表中行數(shù)計(jì)數(shù)并計(jì)算特定列值之和,求得該列的平均值
AVG()函數(shù)可用來返回所有列的平均值惑淳,也可以用來返回特定列或行的平均值
例1:返回列中所有數(shù)據(jù)
返回產(chǎn)品表中所有產(chǎn)品的平均價(jià)格
SELECT AVG(products.prod_price) AS avg_price FROM products;
例2:返回特定列或行的平均值
返回特定供應(yīng)商所提供產(chǎn)品的平均價(jià)格
SELECT AVG(products.prod_price) AS avg_price
FROM products
where vend_id=1003;
只用于單個(gè)列:AVG()函數(shù)只能用來確定特定數(shù)值列的平均值额港,而且列名必須作為函數(shù)參數(shù)給出。為了獲得多個(gè)列的平均值歧焦,必須使用多個(gè)AVG()函數(shù)移斩。
12.1.2 COUNT()函數(shù)
COUNT()函數(shù)用于確定表中行的數(shù)目或符合特定條件的行的數(shù)目
- COUNT(*):對(duì)表中行的數(shù)目進(jìn)行計(jì)數(shù)
- COUNT(column):對(duì)特定列中具有的行進(jìn)行計(jì)數(shù)
例1:檢索客戶表中客戶的總數(shù)
SELECT COUNT(*) AS num_cust
FROM customers;
例2:只對(duì)具有電子郵件地址的客戶計(jì)數(shù)
SELECT COUNT(cust_email) AS num_cust
FROM customers;
12.1.3 MAX()函數(shù)
例:檢索出產(chǎn)品表中最貴的產(chǎn)品的價(jià)格
SELECT MAX(prod_price) AS max_price
FROM products;
12.1.4 MIN()函數(shù)
例:檢索出產(chǎn)品表中最貴的產(chǎn)品的價(jià)格
SELECT MIN(prod_price) AS min_price
FROM products;