1. 程式人生 > >儲存過程--mysql版

儲存過程--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))