Navicat 部落格

計算 SQL 中字串的匹配項 2020 年 6 月 5 日,由 Robert Gravelle 撰寫

儘管 SQL 不像 Java、C++ 和 PHP 這樣的程序式程式設計語言精通字串處理,但 SQL 確實提供了許多處理字串資料的函式。可以使用這些函式來修剪多餘的空格或字元,判斷字串的長度以及串連多個欄位值。字串函式非常值得我們了解學習,因為它們可以幫助提高程式碼的效率和可讀性。在今天的文章中,我們將學習如何使用幾個原生的 SQL 字串函式來計算 char、varchar 或 text 欄位中字串的匹配項。

介紹 LENGTH() 和 REPLACE() 函式

我們今天使用的兩個函式是 LENGTH(str) 和 REPLACE(str, from_str, to_str)。LENGTH() 傳回字串的長度(以位元組為單位);而 REPLACE() 傳回字串 str,並將所有字串 from_str 的匹配項(區分大小寫比對)以字串 to_str 取代。

LENGTH() 函式傳回字串的長度(以位元組為單位)。這有一些衍生的重大問題,因為這意味著對於有五個字元而每個字元有 2 個位元組的字串,LENGTH() 會傳回 10。若要計算純字元長度,請改用 CHAR_LENGTH()。

這是一個範例:

length_function (33K)

這是 REPLACE() 函式的範例,將 URL 的通訊協定從「http」變為「https」:

replace_function (41K)

開始計數

將 LENGTH() 和 REPLACE() 與 ROUND() 函式結合使用,我們可以得到包含文字內容的欄立中特定子字串的計數。這是一個使用 Sakila 範例資料庫的例子,在 film 資料表的 description 欄位中傳回單字「Documentary」的計數:

count_occurrences (172K)

基本上,我們的查詢會將目標子字串的匹配項取代為空字串(""),並比較結果字串的長度。它們之間的差異是來源欄位中子字串的匹配項數目。

將我們的查詢併入使用者函式中

如果你計劃在許多不同的資料表計算字數或使用各種子字串值,則應考慮將主要計算併入自訂使用者函式中。以下是我在 Navicat 建立的名為「count_string_instances」的函式:

count_occurrences_function (84K)

測試函式

我們可以按一下「執行」按鈕來就地測試我們的函式。這將開啟一個對話方塊以接受輸入參數:

input_param_dialog (21K)

傳回的結果確認函式正常運行:

count_occurrences_function_test_result (18K)

在查詢叫用我們的函式

函式準備好後,我們可以呼叫 count_string_instances() 函式以取代查詢的計算部分。當我們開始輸入函式名稱時,Navicat 的自動建議清單現在有我們的函式!

auto_complete (49K)

與所有函式一樣,插入查詢時,它帶有可設定輸入參數。我們可以用 TAB 鍵在它們之間流覽:/p> auto_complete_fields (43K)

這是更改後的查詢和其結果:

query_with_function (181K)

總結

伺服器有許多 SQL 字串函式可以幫助提高程式碼的效率和可讀性。當結合使用時,這些函式尤其強大。在今天的文章中,我們學習如何使用 Navicat 的多功能函式和儲存程序編輯器建立自訂使用者函式來計算 char、varchar 或 text 欄位中字串的匹配項。

Navicat 文章
頻道記錄
分享
部落格封存檔