MySQL建立隨機生成電話的儲存函式
1.
CREATE FUNCTION func_generatePhone() RETURNS CHAR(11) CHARSET utf8 DETERMINISTIC
建立一個名為func_generatePhone的函式,返回型別為CHAR(11),字符集為utf8,確定性函式。
2.
DECLARE head VARCHAR(100) DEFAULT '130,156,136,176,131,133';
宣告一個名為head的變數,型別為VARCHAR(100),預設值為'130,156,136,176,131,133'。該變數儲存手機號的前三位數。
3.
DECLARE content CHAR(10) DEFAULT '0123456789';
宣告一個名為content的變數,型別為CHAR(10),預設值為'0123456789'。該變數儲存手機號剩餘的數字部分。
4.
WHILE LOCATE(',', head_array) > 0 DO
SET head_count = head_count + 1;
SET head_array = SUBSTRING(head_array, LOCATE(',', head_array) + 1);
END WHILE;
透過迴圈計算號碼段的數量。每次迴圈,將head_count加1,同時將head_array擷取逗號後的部分,直到找不到逗號為止。
5.
SET head_count = head_count + 1;
SET selected_head = SUBSTRING_INDEX(SUBSTRING_INDEX(head, ',', FLOOR(1 + RAND() * head_count)), ',', -1);
在號碼段陣列中隨機選擇一個號碼段作為手機號的前三位數。首先將號碼段數量加1,然後根據隨機數生成一個索引值,再透過SUBSTRING_INDEX函式獲取對應的號碼段。
6.
SET phone = CONCAT(selected_head, SUBSTRING(content, FLOOR(1 + RAND() * LENGTH(content)), 1));
將選定的號碼段和隨機選擇的一位數字拼接到phone變數中。
7.
WHILE LENGTH(phone) < 11 DO
SET phone = CONCAT(phone, SUBSTRING(content, FLOOR(1 + RAND() * LENGTH(content)), 1));
END WHILE;
透過迴圈生成剩餘的手機號碼位數,直到phone的長度達到11位為止。每次迴圈,將隨機選擇的一位數字拼接到phone變數中。
完整程式碼
DELIMITER //
CREATE FUNCTION func_generatePhone() RETURNS CHAR(11) CHARSET utf8 DETERMINISTIC
BEGIN
DECLARE head VARCHAR(100) DEFAULT '130,156,136,176,131,133';
DECLARE content CHAR(10) DEFAULT '0123456789';
DECLARE phone CHAR(11) DEFAULT '';-- 將號碼段拆分為陣列
DECLARE head_array VARCHAR(100) DEFAULT head;
DECLARE head_count INT DEFAULT 0;
DECLARE selected_head VARCHAR(3);WHILE LOCATE(',', head_array) > 0 DO
SET head_count = head_count + 1;
SET head_array = SUBSTRING(head_array, LOCATE(',', head_array) + 1);
END WHILE;SET head_count = head_count + 1;
SET selected_head = SUBSTRING_INDEX(SUBSTRING_INDEX(head, ',', FLOOR(1 + RAND() * head_count)), ',', -1);-- 隨機選擇一個號碼段作為手機號的前三位數
SET phone = CONCAT(selected_head, SUBSTRING(content, FLOOR(1 + RAND() * LENGTH(content)), 1));-- 生成後續號碼
WHILE LENGTH(phone) < 11 DO
SET phone = CONCAT(phone, SUBSTRING(content, FLOOR(1 + RAND() * LENGTH(content)), 1));
END WHILE;RETURN phone;
END //DELIMITER ;
結果:
相關文章
- MySQL 儲存函式及呼叫MySql儲存函式
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- 深入mysql建立自定義函式與儲存過程的詳解MySql函式儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mysql迴圈插入資料、生成隨機數及CONCAT函式MySql隨機函式
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- MySQL入門系列:儲存程式(二)之儲存函式簡介MySql儲存函式
- MySQL自定義函式與儲存過程MySql函式儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- SQL---------儲存函式SQL儲存函式
- MySQL儲存過程的建立和使用MySql儲存過程
- 磁阻式隨機儲存器MRAM基本原理隨機
- MySQL之儲存函式詳細介紹艹籟MySql儲存函式
- MATLAB生成服從各種分佈的隨機數函式Matlab隨機函式
- Oracle 隨機函式Oracle隨機函式
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- MySQL優化---儲存過程和儲存函式-1-轉自部落格園MySql優化儲存過程儲存函式
- openresty及lua的隨機函式REST隨機函式
- 瞭解使用mysql 的檢視、儲存過程、觸發器、函式....MySql儲存過程觸發器函式
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- SQL server儲存過程函式SQLServer儲存過程函式
- 隨機變數函式的分佈隨機變數函式
- 分享一個批量產生隨機測試資料的MySQL儲存過程隨機MySql儲存過程
- openGauss 函式及儲存過程支援函式儲存過程
- 儲存過程vs.函式QM儲存過程函式
- mysql 匯入匯出資料庫以及函式、儲存過程的介紹MySql資料庫函式儲存過程
- 蒙特卡洛——使用CDF反函式生成非均勻隨機數函式隨機
- MySQL儲存MySql
- 函式儲存過程併發控制-案例函式儲存過程
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- Mysql中儲存過程、儲存函式、自定義函式、變數、流程控制語句、游標/遊標、定義條件和處理程式的使用示例MySql儲存過程儲存函式變數
- 行式儲存 列式儲存
- Kotlin 鏈式儲存的二叉樹的建立、遍歷Kotlin二叉樹