您的位置:澳门皇冠金沙网站 > 办公软件 > Mysql通过存储过程分割字符串为数组【澳门皇冠金

Mysql通过存储过程分割字符串为数组【澳门皇冠金

2020-02-08 08:21

通过三个函数的组合使用做到分割字符串为数组的功能。

MONTHNAME (date )
英文月份名NOW ( )
当前时间

最后说一下存储过程和mysql的函数

(2).数学类
ABS (number2 )
绝对值

总结

CURRENT_DATE ( )
当前日期

2、按分割取出字符串

DAYOFMONTH(datetime)
月的第几天

SUBSTRING_INDEX(str,delim,count)

(1).字符串类
CHARSET(str)
返回字串字符集

返回字符串str,其字符串from_str的所有出现由字符串to_str代替。

8. MySQL存储过程的控制语句
(1). 变量作用域
内部的变量在其作用域范围内享有更高的优先权,当执行到end。变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派给会话变量来保存其值。

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

1.  mysql> select round(1.23);  
2.  +-------------+  
3.  | round(1.23) |  
4.  +-------------+  
5.  |           1 |  
6.  +-------------+  
7.  1 row in set (0.00 sec)  
8.   
9.  mysql> select round(1.56);  
10.+-------------+  
11.| round(1.56) |  
12.+-------------+  
13.|           2 |  
14.+-------------+  
15.1 row in set (0.00 sec) 

分割字符串为数组需要用到 三个mysql 的函数 :

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

1.  mysql > SET @p_inout=1;  
2.  mysql > CALL demo_inout_parameter(@p_inout) ;  
3.  +---------+  
4.  | p_inout |  
5.  +---------+  
6.  |    1    |  
7.  +---------+  
8.   
9.  +---------+  
10.| p_inout |   
11.+---------+  
12.|    2    |  
13.+---------+  
14. 
15.mysql > SELECT @p_inout;  
16.+----------+  
17.| @p_inout |   
18.+----------+  
19.|    2     |  
20.+----------+ 

结果如下图

STRCMP (string1 ,string2 )
逐字符比较两字串大小,
SUBSTRING (str , position [,length ])
从str的position开始,取length个字符,注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

存储过程和函数存在以下几个区别:

CONV(number2,from_base,to_base)
进制转换

DELIMITER $$CREATE PROCEDURE `sp_print_result`( IN f_string varchar(1000),IN f_delimiter varchar(5))BEGIN -- Get the separated string. declare cnt int default 0; declare i int default 0; set cnt = func_get_split_string_total(f_string,f_delimiter); drop table if exists tmp_print; create temporary table tmp_print (num int not null); while i  cnt do set i = i + 1; insert into tmp_print(num) values (func_get_split_string(f_string,f_delimiter,i)); end while; select * from tmp_print;END$$DELIMITER ;

CONCAT (string2 [,... ])
连接字串

首先写两个函数

MONTH(datetime)

执行 :grant all privileges on *.* to root@"%" identified by ".";

1.  mysql > SET @p_out=1;  
2.  mysql > CALL sp_demo_out_parameter(@p_out);  
3.  +-------+  
4.  | p_out |   
5.  +-------+  
6.  | NULL  |   
7.  +-------+  
8.   
9.  +-------+  
10.| p_out |  
11.+-------+  
12.|   2   |   
13.+-------+  
14. 
15.mysql> SELECT @p_out;  
16.+-------+  
17.| p_out |  
18.+-------+  
19.|   2   |  
20.+-------+  

2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。

DATE_FORMAT (datetime ,FormatCodes )
使用formatcodes格式显示datetime

DELIMITER $$CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)BEGIN -- Get the total number of given string. return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));END$$DELIMITER ;

Ⅲ. 用户变量

3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。

执行结果:

返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。

Ⅱ. case语句:

可能执行的时候会报错:The user specified as a definer (‘root'@'%') does not exist

转载自->

1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。

(2). 声明分割符
其实,关于声明分割符,上面的注解已经写得很清楚,不需要多说,只是稍微要注意一点的是:如果是用MySQL的Administrator管理工具时,可以直接创建,不再需要声明。

解决方法如下:

DATEDIFF (date1 ,date2 )
两个日期差

DELIMITER $$CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8BEGIN -- Get the separated number of given string. declare result varchar(255) default ''; set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1)); return result;END$$DELIMITER ;

DATE_SUB (date2 , INTERVAL d_value d_type )
在date2上减去一个时间

1,获得所有以“某个符号“分割的字符串的个数,函数内容如下

LENGTH (string )
string长度

就解决了这个问题。

MAKETIME (hour ,minute ,second )
生成时间串

4)存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。

LPAD (string2 ,length ,pad )
重复用pad加在string开头,直到字串长度为lengthLTRIM (string2 )

REPLACE(str,from_str,to_str)

Ⅲ. loop ·····endloop:
loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。

执行 :flush privileges;

SQRT(number2)
开平方

然后输入字符串进行测试。

4. MySQL存储过程的调用
用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。

call sp_print_result(“434,123,12,234,123,123”,”,”);

1.  DECLARE l_int int unsigned default 4000000;  
2.  DECLARE l_numeric number(8,2) DEFAULT 9.95;  
3.  DECLARE l_date date DEFAULT '1999-12-31';  
4.  DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';  
5.  DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';   

REVERSE(str) 返回颠倒字符顺序的字符串str。

(5). 注释

然后再写一个存储过程进行组合使用这两个函数,输入需要分割的字符串 ,和分隔符,输出 按某某符号分割后的数组

1.  mysql> select substring('abcd',0,2);  
2.  +-----------------------+  
3.  | substring('abcd',0,2) |  
4.  +-----------------------+  
5.  |                       |  
6.  +-----------------------+  
7.  1 row in set (0.00 sec)  
8.   
9.  mysql> select substring('abcd',1,2);  
10.+-----------------------+  
11.| substring('abcd',1,2) |  
12.+-----------------------+  
13.|     ab                |  
14.+-----------------------+  
15.1 row in set (0.02 sec)  

FORMAT (number,decimal_places )
保留小数位数


STR_TO_DATE (string ,format )
字串转成时间,以format格式显示

变量定义
什么是mysql存储例程?存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令。
为什么要使用mysql存储过程?
我们都知道应用程序分为两种,一种是基于web,一种是基于桌面,他们都和数据库进行交互来完成数据的存取工作。假设现在有一种应用程序包含了这两 种,现在要修改其中的一个查询sql语句,那么我们可能要同时修改他们中对应的查询sql语句,当我们的应用程序很庞大很复杂的时候问题就出现这,不易维 护!另外把sql查询语句放在我们的web程序或桌面中很容易遭到sql注入的破坏。而存储例程正好可以帮我们解决这些问题。
存储过程(stored procedure)、存储例程(store routine)、存储函数区别
Mysql存储例程实际包含了存储过程和存储函数,它们被统称为存储例程。
其中存储过程主要完成在获取记录或插入记录或更新记录或删除记录,即完成select insert delete update等的工作。而存储函数只完成查询的工作,可接受输入参数并返回一个结果。
创建mysql存储过程、存储函数
create procedure 存储过程名(参数)
存储过程体
create function 存储函数名(参数)
下面是存储过程的例子:


Ⅱ. 变量赋值
SET 变量名 = 表达式值 [,variable_name = expression ...]

DELIMITER //  
CREATE PROCEDURE demo_in_parameter(IN p_in int)  
    BEGIN   
    SELECT p_in;   
    SET p_in=2;   
    SELECT p_in;   
    END//  
DELIMITER ; 

ROUND (number [,decimals ])
四舍五入,decimals为小数位数]
注:返回类型并非均为整数,如:(1)默认变为整形值

CEILING (number2 )
向上取整

1.  mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');  
2.  mysql > SET @greeting='Hello';  
3.  mysql > CALL GreetWorld( );  
4.  +----------------------------+  
5.  | CONCAT(@greeting,' World') |  
6.  +----------------------------+  
7.  |  Hello World               |  
8.  +----------------------------+  

Ⅳ. LABLES 标号:
标号可以用在begin repeat while 或者loop 语句前,语句标号只能在合法的语句前面使用。可以跳出循环,使运行指令达到复合语句的最后一步。

SPACE(count)
生成count个空格

LEFT (string2 ,length )
从string2中的左边起取length个字符

LOAD_FILE (file_name )
从文件读取内容

1.  mysql > SET @p_in=1;  
2.  mysql > CALL demo_in_parameter(@p_in);  
3.  +------+  
4.  | p_in |  
5.  +------+  
6.  |   1  |   
7.  +------+  
8.   
9.  +------+  
10.| p_in |  
11.+------+  
12.|   2  |   
13.+------+  
14. 
15.mysql> SELECT @p_in;  
16.+-------+  
17.| @p_in |  
18.+-------+  
19.|  1    |  
20.+-------+  

执行结果:

UCASE (string2 )
转换成大写

DATE_ADD (date2 , INTERVAL d_value d_type )
在date2中加上日期或时间

DAYNAME (date )
英文星期

(3).日期时间类
ADDTIME (date2 ,time_interval )
将time_interval加到date2

MOD (numerator ,denominator )
求余

DAYOFWEEK (date )
星期(1-7) ,1为星期天

ⅲ. 在存储过程间传递全局范围的用户变量

LCASE (string2 )
转换成小写

7. MySQL存储过程的删除
删除一个存储过程比较简单,和删除表一样:
DROPPROCEDURE
从MySQL的表格中删除一个或多个存储过程。

RIGHT(string2,length)
取string2最后length个字符

DATE (datetime )
返回datetime的日期部分

HOUR(datetime)
小时

1.  mysql> CREATE PROCEDURE p1()   SET @last_procedure='p1';  
2.  mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_procedure);  
3.  mysql> CALL p1( );  
4.  mysql> CALL p2( );  
5.  +-----------------------------------------------+  
6.  | CONCAT('Last procedure was ',@last_proc       |  
7.  +-----------------------------------------------+  
8.  | Last procedure was p1                         |  
9.  +-----------------------------------------------+  

本文由澳门皇冠金沙网站发布于办公软件,转载请注明出处:Mysql通过存储过程分割字符串为数组【澳门皇冠金

关键词: