概念
自定義函數
他跟js中的函數幾乎一樣: 需要先定義, 然後調用(使用). 只是規定這個函數必須要返回數據----要有返回值
(1)定義語法
create function 函數名(參數) returns 返回值類型
begin
//代碼
end
特別注意第三點!!!!!
(2)調用
跟系統函數調用一樣: 任何需要數據的位置, 都可以調用該函數
案例一: 返回兩個數的和
CREATE FUNCTION he (num1 INT, num2 INT) RETURNS INT
BEGIN
RETURN num1 + num2;
END;
案例二: 返回1到n的和
CREATE FUNCTION nhe (n INT) RETURNS INT
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE sum INT DEFAULT 0;
WHILE i<=n DO
SET sum=sum+i;
SET i=i+1;
END WHILE;
RETURN sum;
END;
注意: 創建的函數是隸屬於數據庫的, 只能在創建函數的數據庫中使用
系統函數
(1)數字類
SELECT RAND(); // 返回0到1之間的隨機數
SELECT * FROM pcuser ORDER BY RAND() LIMIT 2; // 隨機取出2條記錄
SELECT FLOOR(3.9); // 地板數
SELECT CEIL(4.1); // 天花板數
SELECT ROUND(3.5); // 四捨五入
SELECT * FROM pcuser ORDER BY RAND() LIMIT 2; // 隨機取出2條記錄
SELECT FLOOR(3.9); // 地板數
SELECT CEIL(4.1); // 天花板數
SELECT ROUND(3.5); // 四捨五入
(2)大小寫轉換
SELECT UCASE('I am a boy!'); // 轉成大寫SELECT LCASE('I am a boy!'); // 轉成小寫
(3)截取字符串
SELECT LEFT('abcde',3); //從左邊截取
SELECT RIGHT ('abcde', 3); //從右邊截取
SELECT SUBSTRING('abcde', 2, 3); //從第二個位置開始, 截取3個,
注意: 起始位置從1開始
SELECT CONCAT(10,'hh'); //字符串相連
SELECT CONCAT(id,'-',username) FROM pcuser;
SELECT COALESCE(str1,str2); //如果str1爲null, 就顯示str2
SELECT LENGTH('哈哈'); //輸出6 數據庫採用utf-8編碼 顯示字節個數
SELECT CHAR_LENGTH('哈哈'); // 輸出2 顯示字符個數
SELECT TRIM(' 哈哈'); //去掉字符串兩邊的空格
SELECT REPLACE ('abc', 'bc', 'pache'); //將abc 中的bc 替換成pache
(4)時間類
SELECT UNIX_TIMESTAMP(); // 當前時間戳 結果:1501729122SELECT FROM_UNIXTIME(UNIX_TIMESTAMP()); // 將時間戳轉成日期默認格式 結果: 2017-08-03 10:59:12
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y-%m-%d'); // 指定格式 結果: 2017-08-03
SELECT FROM_UNIXTIME(0); --1970-01-01 08:00:00
SELECT CURDATE(); //返回今天的時間日期; 格式 2017-08-03
SELECT NOW(); //取當前時間 格式 2017-08-03 10:57:27
SELECT YEAR(NOW()); 年
SELECT MONTH(NOW()); 月
SELECT DAY(NOW()); 日
SELECT HOUR(NOW()); 時
SELECT MINUTE(NOW()); 分
SELECT SECOND(NOW()); 秒
SELECT DATEDIFF(NOW(),'2017-07-03'); 兩個日期相距多少天 前-後 31
DATE_SUB(date,INTERVAL expr unit); // 取出指定間隔的日期 -
DATE_ADD(date,INTERVAL expr unit);// 取出指定間隔的日期 +
SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY); //取出昨天的日期
SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY);
案例一: 一個電影網站, 求出今天添加的電影; 在添加電影時候, 有一個添加的時間戳
//curdate() 求出今天的日期
//把添加的時間戳, 轉換成日期
select title from archives where curdate() = FROM_UNIXTIME(timestamp,'%Y-%m-%d');
案例二: 一個電影網站, 求出昨天添加的電影; 在添加電影時候, 有一個添加的時間戳
把添加的時間戳, 轉換成日期, 和昨天的日期比較
select title from archives where DATE_ADD(CURDATE(), INTERVAL -1 DAY) = FROM_UNIXTIME(timestamp,'%Y-%m-%d');