第十一章使用數據處理函數
11.1函數
SQL支持函數來處理數據但是函數的可移植性沒有SQL強。
11.2使用函數
11.2.1文本處理函數
輸入:
SELECT vend_name,UPPER(vend_name) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
輸出:
說明:UPPER()將文本轉換為大寫。
輸入:
SELECT vend_name,LEFT(vend_name,3) AS vend_name_upcase
FROM vendors
ORDER BY vend_name;
輸出:
說明:LEFT()函數用來從字符串左側截取文本,LEFT(要截取的文本,截取的位數)。
輸入:
SELECT vend_name,LENGTH(vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:LENGRH(字符串)函數用來返回字符串的長度。
輸入:
SELECT vend_name,LOCATE('ou',vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:LOCATE(待查找的字符串,被查找的字符串)找出串的一個子串,返回的是子串在串中的位置。
輸入:
SELECT vend_name,LOCATE('ou',vend_name,4) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:LOCATE(待查找的字符串,被查找的字符串,從第幾個字符串開始查找)從串的第幾個位置開始找出串的一個子串,返回的是子串在串中的位置。
輸入:
SELECT vend_name,LOWER(vend_name) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:LOWER(字符串)將串轉換為小寫。
輸入:
SELECT vend_name,RIGHT(vend_name,3) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:RIGHT(字符串,截取位數)從右邊截取字符串相應的位數。
輸入:
SELECT cust_name,cust_contact
FROM customers
WHERE cust_contact = 'Y. Lie';
輸出:
輸入:
SELECT cust_name,cust_contact
FROM customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Y. Lie');
輸出:
說明:SOUNDEX()返回串的SOUNDEX值。SOUNDEX是一個將任何文本串轉換為描述其語音表示的字母數字模式的算法。SOUNDEX考慮了類似的發音字符和音節,使得能對串進行發音比較而不是字母比較。雖然SOUNDEX不是SQL概念,但MySQL(就像多數DBMS一樣)都提供對SOUNDEX的支持。
第一次查詢之所以找不到相應的結果,是因為表中錄入的數據存在錯誤,使用SOUNDEX()函數就可以在讀音類似的情況下規避掉這種問題。
輸入:
SELECT vend_name,SUBSTR(vend_name FROM 2 FOR 3) AS vend_name_change
FROM vendors
ORDER BY vend_name;
輸出:
說明:SUBSTRING(字符串,FROM 開始位數 FOR 子串長度)返回串的子串。
11.2.2日期和時間處理函數
輸入:
SELECT cust_id, order_num
FROM orders
WHERE order_date = '2005-09-01';
輸出:
說明:MySQL使用的日期格式為yyyy-mm-dd。但是這樣的檢索中可能存在由于儲存的時間不僅僅包含了日期還包含了時間,此時單單憑借日期的檢索是很難實現的。
輸入:
SELECT cust_id, order_num
FROM orders
WHERE DATE(order_date) = '2005-09-01';
輸出:
說明:DATE()函數返回日期時間的日期部分。這樣的比較是更加可靠的。
輸入:
SELECT TIME('2025-04-08 13:45:00');
輸出:
說明:TIME()返回的日期時間的時間部分。
輸入:
SELECT ADDDATE('2025-04-08',1);
輸出:
說明:ADDDATE(日期,所增加天數/周等),在日期上增加一段時間。
輸入:
SELECT ADDDATE('2025-04-08',-1);
輸出:
說明:也可以減少,只需要把INTERVAL變為負數即可。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 HOUR);
輸出:
說明:增加兩個小時。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 HOUR);
輸出:
說明:減少兩個小時。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 MINUTE);
輸出:
說明:增加兩分鐘。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 MINUTE);
輸出:
說明:減少兩分鐘。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL 2 SECOND);
輸出:
說明:增加兩秒。
輸入:
SELECT ADDDATE('2025-04-08 13:57:00',INTERVAL -2 SECOND);
輸出:
說明:減少兩秒。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 WEEK);
輸出:
說明:可以變更后面的UNIT實現不同時間段的增減。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 WEEK);
輸出:
說明:減少兩周。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 MONTH);
輸出:
說明:變更為MONTH就是兩個月的增加。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 MONTH);
輸出:
說明:也可以減少,只需要把INTERVAL變為負數即可。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL 2 YEAR);
輸出:
說明:也可以增加兩年。
輸入:
SELECT ADDDATE('2025-04-08',INTERVAL -2 YEAR);
輸出:
說明:減少兩年。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',2);
輸出:
說明:增加兩秒。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',-2);
輸出:
說明:減少兩秒。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',200);
輸出:
說明:增加兩分鐘。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',-200);
輸出:
說明:減少兩分鐘。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00','00:01:00');
輸出:
說明:增加一分鐘。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00','-00:01:00');
輸出:
說明:減少一分鐘。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',10000);
輸出:
說明:增加一小時。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00',-10000);
輸出:
說明:減少一小時。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00','01:00:00');
輸出:
說明:增加一小時。
輸入:
SELECT ADDTIME('2025-04-08 14:18:00','-01:00:00');
輸出:
說明:減少一小時。
輸入:
SELECT CURDATE();
輸出:
說明:返回當前日期。
輸入:
SELECT CURTIME();
輸出:
說明:返回當前時間。
輸入:
SELECT DATEDIFF('2025-04-08','2025-04-10');
輸出:
說明:返回兩個日期之間的差值。結果以天數形式返回。
輸入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 YEAR);
輸出:
說明:DATE_ADD()高度靈活的日期計算函數。這里使用的是在當前日期上增加兩年。
輸入:
SELECT DATE_ADD('2025-04-08',INTERVAL -2 YEAR);
輸出:
說明:在當前日期上減少兩年
輸入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 QUARTER),
DATE_ADD('2025-04-08',INTERVAL -2 QUARTER);
輸出:
說明:QUARTER是季度的意思。
輸入:
SELECT DATE_ADD('2025-04-08',INTERVAL 2 HOUR),DATE_ADD('2025-04-08',INTERVAL -2 HOUR);
輸出:
說明:增加或減少兩個小時。
輸入:
SELECT DATE_FORMAT(CURDATE(), '%Y-%m-%d');
輸出:
說明:返回一個格式化的日期或字符串。
輸入:
SELECT DATE_FORMAT(CURDATE(), '%Y/%m/%d');
輸出:
輸入:
SELECT DAY(CURDATE());
輸出:
說明:DAY()函數返回一個日期的天數部分。
輸入:
SELECT DAYOFWEEK(CURDATE());
輸出:?
說明:DAYOFWEEK()函數返回對應的星期幾。但是這里需要注意數字1對應的是周日,以此類推。這里的3代表的是星期二。
輸入:
SELECT HOUR(CURTIME());
輸出:
說明:HOUR()函數返回一個時間的小時部分。
輸入:
SELECT MINUTE(CURTIME());
輸出:
說明:MINUTE()函數返回一個時間的分鐘部分。
輸入:
SELECT MONTH(CURTIME());
輸出:
說明:MONTH()函數返回一個時間的月份部分。
輸入:
SELECT SECOND(CURTIME());
輸出:
說明:SECOND()函數返回一個時間的秒部分。
輸入:
SELECT TIME(CURTIME());
輸出:
說明:TIME()函數返回一個日期時間的時間部分。
輸入:
SELECT YEAR(CURTIME());
輸出:
說明:YEAR()函數返回一個日期的年份部分。
輸入:
SELECT NOW();
輸出:
說明:NOW()返回當前日期和時間。
11.2.3數值處理函數
輸入:
SELECT ABS(-5.2);
輸出:
說明:ABS()函數返回一個數的絕對值。
輸入:
SELECT COS(PI()/3);
輸出:
說明:COS()函數返回一個角度的余弦值。PI()表示π
輸入:
SELECT EXP(1);
輸出:
說明:EXP()函數返回一個數的指數值。以e為底數。
輸入:
SELECT MOD(12,5);
輸出:
說明:MOD()函數返回除操作的余數值。
輸入:
SELECT RAND();
輸出:
說明:RAND()函數返回一個隨機數。
輸入:
SELECT SIN(PI()/6);
輸出:
說明:SIN()函數返回一個角度的正弦值。
輸入:
SELECT TAN(PI()/4);
輸出:
說明:TAN()函數返回一個角度的正切。
輸入:
SELECT SQRT(4);
輸出:
說明:SQRT()函數返回一個數的平方根。