MySql自定义函数

查找指定字符串出现的次数

在长串中查找小串出现的次数
例如:
在 “我爱我家” 查找"我"出现了几次
自定义函数

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值