1. 程式人生 > >Mysql儲存過程中字串分割

Mysql儲存過程中字串分割

今在專案中碰到了要把字串分割,記錄下來,以後可能還用的到

首先想上我的儲存過程程式碼

DELIMITER $$

USE `bplate`$$

DROP PROCEDURE IF EXISTS `lp_plate_insertplateinfo`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `lp_plate_insertplateinfo`(
	plate_user INT,
	plate_title VARCHAR(60) ,
	plate_type INT,
	plate_img VARCHAR(500),
	plate_content MEDIUMTEXT,
	plate_sku_name VARCHAR(60),
	plate_sku_price VARCHAR(60)
    )
BEGIN
	
	DECLARE i INT DEFAULT 0; 
	
	SET @sql1=CONCAT("INSERT INTO bp_plate(`plate_user`,`plate_title`,`plate_type`,`plate_img`,`plate_sales`,`plate_content`,`plate_level`,`plate_time`,`plate_state`) VALUE(",plate_user,",'",plate_title,"',",plate_type,",'",plate_img,"',",0,",'",plate_content,"',0,NOW(),1)");
	
	
	PREPARE sql1 FROM @sql1;
	EXECUTE sql1;
	
	
	
	SET @plate_id='';
	SELECT LAST_INSERT_ID() INTO @plate_id FROM bp_plate LIMIT 0,1;
	
	
	
	SET @arraylength=1+(LENGTH(plate_sku_name) - LENGTH(REPLACE(plate_sku_name,',','')));
	
	
	WHILE i<@arraylength
		DO
		SET i=i+1;
		SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(plate_sku_name,',',i)),',',1)); 
		SET @resultprice = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(plate_sku_price,',',i)),',',1));
		INSERT INTO bp_plate_sku(`plate_id`,`sku_name`,`sku_price`,`sku_time`,`sku_state`) VALUE(@plate_id,@result,@resultprice,NOW(),1);
	END WHILE;	
	
    END$$

DELIMITER ;

這是我整個儲存過程,分割的是傳進來的
plate_sku_name VARCHAR(60),
plate_sku_price VARCHAR(60)
變數,注意型別不能是int,不然不能分割

然後只要分割方法在於

SET @arraylength=1+(LENGTH(plate_sku_name) - LENGTH(REPLACE(plate_sku_name,',','')));
	
	
	WHILE i<@arraylength
		DO
		SET i=i+1;
		SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(plate_sku_name,',',i)),',',1)); 
		SET @resultprice = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(plate_sku_price,',',i)),',',1));
		INSERT INTO bp_plate_sku(`plate_id`,`sku_name`,`sku_price`,`sku_time`,`sku_state`) VALUE(@plate_id,@result,@resultprice,NOW(),1);
	END WHILE;	
@arraylength獲取要分割字串根據符號分割後的陣列長度

之後便是一個while迴圈

中間用

 REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(plate_sku_name,',',i)),',',1));
方式來分割

裡面的‘,’是根據要分割的字元,plate_sku_name是要分割的字串,變數i要從1開始

之後便能分割了

相關推薦

Mysql儲存過程字串分割

今在專案中碰到了要把字串分割,記錄下來,以後可能還用的到 首先想上我的儲存過程程式碼 DELIMITER $$ USE `bplate`$$ DROP PROCEDURE IF EXISTS `lp_plate_insertplateinfo`$$ CREATE DE

mysql儲存過程字串轉換數字

公司的需求,需要根據使用者的設定的百分比去查詢資料。當時純真的以為可以 -- set @a_value=`CONVERT`(@a_value,DOUBLE); 但是會出現錯誤,百度了一下,原來convert不支援轉化為double 只能轉換以下型別 二進位制,同帶binar

MySql儲存過程傳參和不傳參以及java呼叫程式碼

資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product

MySQL儲存過程的3種迴圈,儲存過程的基本語法,ORACLE與MYSQL儲存過程/函式的使用區別,退出儲存過程方法

  學無止境 部落格園   首頁   新隨筆   聯絡   訂閱  管理 隨筆-1968  評論-103  文章-4&

MySQL 儲存過程執行DDL

一、定期增加表分割槽 1、增加表分割槽例 CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `p_create_Partition`(IN databaseName VARCHAR(50),IN tableName VARCHAR(50))L_END:BEGIN&nb

MySQL儲存過程declare和set定義變數的區別

  在儲存過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是區域性變數,@set定義的類似全域性變數。  1、declare定義的變數類似java類中的區域性變數,僅在類中生效。即只在儲存過程中的begin和end之間生效。  2

mysql儲存過程使用select count(*) into 變數名 from +表+ where條件的用法

select count(*) into v_count from dual where userid=2;此語句的意思就是根據where條件查詢dual表,得到的行數存入變數v_count中(給變數賦值) 只能在儲存過程中編寫這樣的語句?如果在mysql的sql語句中編寫

mysql儲存過程 declare 和 set 定義變數的區別

mysql儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。 2.以 DECLARE 關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過

mysql 儲存過程limit

1、mysql的高版本(5.5),儲存過程中的limit可以使用變數,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),儲存過程中的limit不能使用變數,編譯報錯,如下:You have an error in your SQL sy

mysql 儲存過程使用多遊標

mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_test`

MySQL儲存過程的三種迴圈方式

“明月別枝驚鵲,清風半夜鳴蟬” 最近儲存過程寫得多,迴圈多數用在遊標裡,在這裡總結幾種迴圈的方式 CREATE DEFINER=`root`@`localhost` PROCEDURE `NewProc`() BEGIN DECLARE sta

mysql儲存過程的三種迴圈

#loop drop procedure if exists p1_; create procedure p1_ ( in in_ int , out out_ varchar(3)) #varch

MySQL儲存過程的IN,OUT,INOUT型別 用法

MySQL儲存過程中有IN,OUT,INOUT型別 ----------------------------------- ## IN IN引數只用來向過程傳遞資訊,為預設值。 ## MySQL儲存過程"in"引數:跟C語言的函式引數的值傳遞類似,MySQL儲存過程內部

MySQL儲存過程的3種迴圈

    -> begin    -> declare i int default 0;    -> loop_label:loop    ->     if i=3 then    ->         set i=i+1;    ->         iterate lo

MySql儲存過程limit傳參

最近做專案用到了MySql資料庫,感覺還是蠻好用的,但是有同事前幾天寫儲存過程的時候老調不通,我看了看後發現把limit語句後面帶的引數隨便改成一個數字就除錯通過了,不知道是MySql當初就這麼設計的還是一個bug。後來在網上找到一個方法可以通過傳引數的方法解決該問題:

Mysql儲存過程使用cursor

一、表 學生表 CREATE TABLE `t_student` (    `stuNum` int(11) NOT NULL auto_increment,    `stuName` varchar(20) default NULL,    `birthday` date default NULL,    

MySql儲存過程的基本函式和需要用到的運算子

mysql儲存過程學習總結-操作符算術運算子+ 加 SET var1=2+2; 4- 減 SET var2=3-2; 1* 乘 SET var3=3*2; 6/ 除 SET var4=10/3; 3.3333DIV 整除 SET var5=10 DIV 3; 3% 取模 SET var6=10%3 ; 1比較

MySQL 儲存過程 CONCAT 字串拼接

CREATE PROCEDURE pro_province_report (IN startDate VARCHAR(20),IN endDate VARCHAR(20),IN SourceType INT) /* 功能:根據時間,來源SourceType 統計 每

MySQL儲存過程,定義變數有兩種方式

MySQL儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。

mysql儲存過程使用遊標

使用者變數一般以@開頭,作用於全域性範圍 區域性變數需用 declare 定義格式為 declare 變數名 資料型別 [default value]; mysql 資料型別有 int ,float,date,varchar(length)等 宣告的順序必須是 先宣告變