字符串函數列表
比日期和時間更多的功能——只有 String 類型。SQL 中的哪個由 CHAR(n) 和 VARCHAR(n) 類型給出。讓我們回顧一下其中最受歡迎的:
功能 | 描述 | |
---|---|---|
1個 | 長度(str) | 以字節為單位返回傳遞的字符串的長度 |
2個 | CHAR_LENGTH(str) | 以字符形式返回傳遞的字符串的長度 |
3個 | 定位(substr,str), | 在類似於 indexOf() 方法的字符串中搜索子字符串 |
4個 | 定位(substr,str,pos) | 從 pos 開始搜索字符串中的子字符串 |
5個 | CONCAT(str1,str2,...) | 連接多行 |
6個 | SUBSTR(), SUBSTRING() | 返回由一系列字符給出的子字符串 |
7 | 降低(str) | 將字符串轉換為小寫 |
8個 | 上(str) | 將字符串轉換為大寫 |
9 | 代替() | 替換字符串中的子字符串 |
10 | 匹配() | 檢查字符串是否匹配給定的模式 |
十一 | 修剪(海峽) | 修剪字符串開頭和結尾的空字符 |
12 | LTRIM(海峽) | 修剪字符串開頭的空字符 |
13 | RTRIM(海峽) | 修剪字符串末尾的空字符 |
14 | TO_BASE64(str) | 將字符串轉換為 Base64 |
15 | FROM_BASE64(str) | 從 Base64 轉換字符串 |
我特意將功能分成小組,以便更容易理解如何使用它們。下面我們將考慮每組中的一個函數。您可以在官方文檔中找到處理字符串的完整函數列表。
讓我們轉換字符串
讓我們首先處理最簡單的函數,這些函數只是將字符串轉換為稍微不同的形式。例如,將字符串轉換為大寫和小寫。通常,它們的行為類似於 Java 語言中的相同函數。
所以我只給出一個表格和幾個例子。
# | 要求 | 結果 |
---|---|---|
1個 | 選擇長度('文本') | 4個 |
2個 | 選擇長度('你好') | 12 |
3個 | 選擇較低的('嗨') | 你好 |
4個 | 選擇上層('你好') | 你好 |
5個 | 選擇SUBSTR ('你好', 2, 3) | 里夫 |
6個 | SELECT SUBSTR('嗨,你好嗎?',8) | 你好嗎? |
這些函數按預期工作,就像它們在 JDK 中的對應函數一樣。
唯一需要注意的是:在第一行中,結果是 4,而不是 8。問題是請求中使用了 1 個字節(ASCII 編碼)來對拉丁字符進行編碼。但如果您使用數據庫中的數據,則字符串的長度將取決於數據庫編碼設置。使用數據庫時你會發現很多驚喜:)
字符串的複雜操作
好吧,讓我們看看使用字符串時更複雜的事情。你會想出什麼...
讓我們從任務表中顯示任務,如果任務截止日期已經過去,則在任務描述中添加 EXPIRED 一詞!
聽起來不錯。雖然我們還沒有了解複雜的條件,但讓我們稍微簡化一下任務。讓我們編寫一個顯示過去任務列表的查詢,但一定要在標題中添加單詞“EXPIRED!” 。.
為此,我們必須使用 CONCAT 函數:
SELECT CONCAT( 'EXPIRED! ', name) FROM task
WHERE deadline < CURDATE()
此查詢的結果將是:
連接('過期!',名稱) |
---|
已到期!修復一個前端bug |
推薦。如果您只需要將數據轉換為稍微不同的形式,那麼這也可以在 Java 代碼級別完成。但是如果你想使用 SQL 服務器端的字符串函數(在 WHERE 內部),那麼你肯定離不開它們。
GO TO FULL VERSION