文章目录
查找指定字符串出现的次数
在长串中查找小串出现的次数
例如:
在 “我爱我家” 查找"我"出现了几次
自定义函数
delimiter $$
DROP FUNCTION IF EXISTS `fn_findCharCount` $$
CREATE FUNCTION fn_findCharCount ( in_str text, in_find_str text ) RETURNS INT ( 11 )
BEGIN
DECLARE
tcount INT DEFAULT 0;
DECLARE
new_str text;
DECLARE
scount INT;
SET new_str = in_str;
SELECT
INSTR( new_str, in_find_str ) INTO scount;
WHILE
scount > 0 DO
SET tcount = tcount + 1;
SELECT
SUBSTRING(
new_str
FROM
( scount + 1 ) FOR CHAR_LENGTH( new_str )) INTO new_str;
SELECT
INSTR( new_str, in_find_str ) INTO scount;
END WHILE;
RETURN ( tcount );
END $$
delimiter;
说明:
(1)DELIMITER $$ 定义结束符。MySQL默认的结束符是分号,但是函数体中可能用到分号。为了避免冲突,需要另外定义结束符。
(2)DROP FUNCTION IF EXISTS `fn_findCharCount` $$ 如果函数fn_findCharCount已经存在了,就删除掉。
(3) CREATE FUNCTION 创建函数fn_findCharCount ,函数的参数是in_str 和 in_find_str 返回值是 INT ( 11 )。
(4)函数体放在BEGIN 与 END之间。
(5)DECLARE 声明变量
(6)RETURN 返回结果。
NVL
mysql自带的 IFNULL(参数1,参数2)
如果 参数1 为NULL,则返回参数2。
我们在使用时发现,如果参数1为空字符串,是不会返回参数2的。
如果我们有业务需求,把NULL和空字符串都视为NULL的话可以使用下面的函数
delimiter $$
DROP FUNCTION IF EXISTS `FUNC_IFNULL` $$
CREATE FUNCTION FUNC_IFNULL ( param text,param2 text) RETURNS text CHARSET utf8
BEGIN
return if(length(trim(param))>0,param,param2);
END $$
delimiter;
select FUNC_IFNULL(' ','sql') 返回 sql
select FUNC_IFNULL(' ','sql') 返回 sql
select FUNC_IFNULL(NULL,'sql') 返回 sql
select FUNC_IFNULL('a','sql') 返回a
判空
mysql 自带函数 ISNULL(expr)
如果参数为NULL 返回 1,否则返回 0
如果有业务需求,参数为NULL或空字符串都视为NULL的话,可以使用下面的函数
FUNC_IS_EMPTY为空返回1,否则返回0
delimiter $$
DROP FUNCTION IF EXISTS `FUNC_IS_EMPTY` $$
CREATE FUNCTION FUNC_IS_EMPTY (PI_VALUE text) RETURNS tinyint(4)
begin
RETURN ISNULL(PI_VALUE) OR PI_VALUE = '';
end $$
delimiter;
select FUNC_IS_EMPTY(' ') 返回 1
select FUNC_IS_EMPTY('') 返回 1
select FUNC_IS_EMPTY(NULL) 返回 1
select FUNC_IS_EMPTY('a') 返回 0
相应的就有判断非空的函数
FUNC_IS_NOT_EMPTY 参数非空返回1,否则返回0
delimiter $$
DROP FUNCTION IF EXISTS `FUNC_IS_NOT_EMPTY` $$
CREATE FUNCTION FUNC_IS_NOT_EMPTY (PI_VALUE text) RETURNS tinyint(4)
begin
RETURN !ISNULL(PI_VALUE) AND PI_VALUE != '';
end $$
delimiter;
SELECT FUNC_IS_NOT_EMPTY(NULL); 返回 0
SELECT FUNC_IS_NOT_EMPTY(''); 返回 0
SELECT FUNC_IS_NOT_EMPTY(' '); 返回 0
SELECT FUNC_IS_NOT_EMPTY('a'); 返回 1