上一篇:sql拆分文本為數組,實際案例帶你2分鐘學會
前述3篇文章已經分享了Mysql的高級特性:窗口函數、wit通用表達式和json函數,本文将繼續分享高級特性,自定義函數,分三部分呈現:
第一部分,介紹Mysql的自定義函數。
第二部分,實戰,解決問題。
第三部分,總結。
一、自定義函數通常編程語言中的函數是必備技能,不管是面向對象還是面向過程,都離不開函數。Mysql中也有函數功能,常用的是内置函數(built-in functions),自定義函數功能也要學會,很實用。
1、創建函數
下面2個簡單的實例找下整體的定義感覺。
1.1 無參函數
1.2 有參函數
函數的括号裡有參數。
2、聲明
函數定義必須聲明方式,否則會報錯。截取官方文檔中的說明:
When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication. By default, for a CREATE FUNCTION statement to be accepted, at least one of DETERMINISTIC, NO sql, or READS SQL DATA must be specified explicitly. Otherwise an error occurs: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
3、複雜函數體
在函數體body中,可以實現複雜的邏輯,這樣就把很多不斷重複做的查詢統計預先定義好,直接調用函數即可。
函數體中的語法更豐富,相當于就是編程語言,有控制、邏輯、分析、流程、變量等。之前分享的語法也可以運用到body中。
3、函數的增删改查
數據表通常說增删改查,函數也有這個說法,誰讓是自定義的呢,不讓改和删還了得。
3.1 增
在上面已經呈現。
3.2 查列表
3.3 查定義
3.4 删
3.3 改
官方文檔顯示,不允許修改,所以隻能先删再建。
For stored procedures and functions and for triggers, you must drop the object and re-create it to assign a different DEFINER account.
查到原來定義,修改好,删掉原來的函數,再執行新增修改後的函數。
二、實戰1、類數組轉為json數組
繼續之前案例,這樣就方便很多了。在同一個分析主題内,f_json()函數會讓sql清爽許多。
2、計算字符中匹配字符的個數
這也是此前案例中用到的場景,補充了字符函數的缺失功能——字符計數。
(1)函數,把複雜的邏輯封裝起來,直接調用,會使sql看起來清爽許多。
(2)筆者,常常唠叨的就是,重複操作的一定要封裝為函數(不過用的R語言,後續也有R專欄)。
(3)使用自定義函數,就不得不提存儲過程。關注後續文章。
上一篇:sql拆分文本為數組,實際案例帶你2分鐘學會
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!