儘管 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()。
這是一個範例:
這是 REPLACE() 函式的範例,將 URL 的通訊協定從「http」變為「https」:
開始計數
將 LENGTH() 和 REPLACE() 與 ROUND() 函式結合使用,我們可以得到包含文字內容的欄立中特定子字串的計數。這是一個使用 Sakila 範例資料庫的例子,在 film 資料表的 description 欄位中傳回單字「Documentary」的計數:
基本上,我們的查詢會將目標子字串的匹配項取代為空字串(""),並比較結果字串的長度。它們之間的差異是來源欄位中子字串的匹配項數目。
將我們的查詢併入使用者函式中
如果你計劃在許多不同的資料表計算字數或使用各種子字串值,則應考慮將主要計算併入自訂使用者函式中。以下是我在 Navicat 建立的名為「count_string_instances」的函式:
測試函式
我們可以按一下「執行」按鈕來就地測試我們的函式。這將開啟一個對話方塊以接受輸入參數:
傳回的結果確認函式正常運行:
在查詢叫用我們的函式
函式準備好後,我們可以呼叫 count_string_instances() 函式以取代查詢的計算部分。當我們開始輸入函式名稱時,Navicat 的自動建議清單現在有我們的函式!
與所有函式一樣,插入查詢時,它帶有可設定輸入參數。我們可以用 TAB 鍵在它們之間流覽:/p>
這是更改後的查詢和其結果:
總結
伺服器有許多 SQL 字串函式可以幫助提高程式碼的效率和可讀性。當結合使用時,這些函式尤其強大。在今天的文章中,我們學習如何使用 Navicat 的多功能函式和儲存程序編輯器建立自訂使用者函式來計算 char、varchar 或 text 欄位中字串的匹配項。