使用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 語句呼叫。自定義函式與儲存過程之間存在幾點區...