MYSQL自定義資料庫函式

2021-09-24 12:39:04 字數 3836 閱讀 2062

使用mysql資料庫的時候由於框架限制需要自定義資料庫函式,寫了幾個資料庫函式,簡單做個記錄吧

-- 啟用log_bin_trust_function_creators: 此項操作之前需要檢查log_bin_trust_function_creators的值

-- show variables like 'log_bin_trust_function_creators'; 

-- 結果為off執行如下set語句,為on則不執行set語句

set global log_bin_trust_function_creators=1;

-- 建立將版本資訊轉換為字串的函式vertostr

-- input: vertostr("v1.02.03.40")  output: 0001000200030040

delimiter //

drop function if exists vertostr // 

create function vertostr(ver varchar(20))

returns varchar(50)

begin

declare len int;

declare verstr varchar(50);

declare result varchar(50);

set len=length(ver)-length(replace(ver,'.',''));

-- replace input version v and v

set verstr=replace(replace(ver,'v',''),'v','');

if len=0 then

set result=lpad(substring_index(substring_index(verstr, '.', 1), '.', -1), 4, '0');

elseif len=1 then

set result=concat(lpad(substring_index(substring_index(verstr, '.', 1), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 2), '.', -1), 4, '0'));

elseif len=2 then

set result=concat(lpad(substring_index(substring_index(verstr, '.', 1), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 2), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 3), '.', -1), 4, '0'));

else

set result=concat(lpad(substring_index(substring_index(verstr, '.', 1), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 2), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 3), '.', -1), 4, '0'),lpad(substring_index(substring_index(verstr, '.', 4), '.', -1), 4, '0'));

end if;

return result;

end //

delimiter ;

delimiter //

-- 獲取拆分的某個字串

-- input: split_str("abc_def_ghi",'_',1)  output: abc

drop function if exists split_str //

create function split_str(

x varchar(255),

delim varchar(12),

pos int

) returns varchar(255)

begin 

return replace(substring(substring_index(x, delim, pos),

length(substring_index(x, delim, pos -1)) + 1),

delim, '');

end //

delimiter ;

delimiter //   

-- 獲取拆分的個數

-- input: func_get_split_string_total("abc_def_ghi",'_')  output: 3

drop function if exists func_get_split_string_total //

create function func_get_split_string_total(  

f_string varchar(1000),

f_delimiter varchar(5)  

) returns int(11)  

begin  

declare returnint int(11);  

if length(f_delimiter)=2  then  

return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')))/2;  

else      

return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));  

end if; 

end //

delimiter ;

delimiter //  

-- 將原字串拆分成帶單引號和逗號連線的字串

-- input: split_linetoobject("abc,def,ghi",',')  output: 'abd','def','ghi'

drop function if exists split_linetoobject //     

create function split_linetoobject(

x varchar(4000),

delim varchar(12)

) returns varchar(4000) 

begin 

declare i int;

declare tempstr varchar(260);

declare returnstr varchar(4000); 

set i = 1;  

set returnstr = ""; 

if(x is null or length(x)=0) then  

return returnstr;  

else  

while i<=func_get_split_string_total(x,delim)  

do  

set tempstr = concat("'",split_str(x,delim,i),"',");

set returnstr = concat(returnstr,tempstr);

set i = i+1;  

end while;  

set returnstr = substring(returnstr,1,length(returnstr)-1);            

return returnstr;

end if;

end //

delimiter ;

自定義mysql資料庫函式 資料庫自定義函式

這個為通用過濾關鍵字的函式,若有其他關鍵字未新增可以參考語法加入。use db go object userdefinedfunction dbo f filterstring script date 12 09 2013 17 03 45 set ansi nulls on go set quot...

python高階 自定義庫函式

在python使用過程中,在不同的專案裡,常常會出現頻繁地自定義同乙個函式的情況。為了解決這個問題,我們可以選擇建立乙個自定義的庫,並將其新增到系統路徑中 具體操作如下 在任意位置新建乙個專案my libs,並在其中新建python檔案my lib1和my lib2,將需要自定義的函式在my lib...

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...