儲存過程--mysql版
給大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油
1.基礎知識
1.1CAST函式
CAST函式語法規則是:Cast(欄位名 as 轉換的型別 ),其中型別可以為:
CHAR[(N)] 字元型
DATE 日期型
DATETIME 日期和時間型
DECIMAL float型
SIGNED int
TIME 時間型
例子:
表table1
date:2015-11-03 15:31:26
select cast(date as signed) as date from table1;
結果如下:
date:20151103153126
1.2 CONCAT函式
用於將多個字串連線成一個字串.返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。或許有一個或多個引數。 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變數中含有任一二進位制字串,則結果為一個二進位制字串。一個數字引數被轉化為與之相等的二進位制字串格式;若要避免這種情況,可使用顯式型別 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)
1.3GROUP_CONCAT函式,按照分組把需要連線的值,連線起來
舉例說明:
select * from goods;
+------+------+
| id| price|
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)
以id分組,把price欄位的值在同一行打印出來,逗號分隔(預設)
select id, group_concat(price) from goods group by id;
+------+--------------------+
| id| group_concat(price) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
1.4FIND_IN_SET函式
FIND_IN_SET(parent_id,oTempChild) // parent_id 是否在oTempChild中
2.儲存過程舉例說明(裡面包含遞迴查詢)
create function getChildrenOrg(orgid INT)
returns varchar(4000)
BEGIN
DECLARE oTemp VARCHAR(4000);
DECLARE oTempChild VARCHAR(4000);
SET oTemp = '';
SET oTempChild = CAST(orgid AS CHAR);
WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempChild);
SELECT GROUP_CONCAT(id) INTO oTempChild FROM user WHERE FIND_IN_SET(parent_id,oTempChild) > 0;
END WHILE;
RETURN oTemp;
END
//查詢orgid 的所有子orgid
3.呼叫說明
SELECT * from user where FIND_IN_SET(id, getChildrenOrg(3))