表 14.12 字串函數與運算子
| 名稱 | 說明 |
|---|---|
ASCII() |
傳回最左邊字元的數值 |
BIN() |
傳回包含數字二進位表示的字串 |
BIT_LENGTH() |
傳回引數的位元長度 |
CHAR() |
傳回每個傳遞的整數的字元 |
CHAR_LENGTH() |
傳回引數中的字元數 |
CHARACTER_LENGTH() |
CHAR_LENGTH() 的同義字 |
CONCAT() |
傳回串連字串 |
CONCAT_WS() |
傳回帶分隔符號的串連字串 |
ELT() |
傳回索引編號的字串 |
EXPORT_SET() |
傳回一個字串,其中對於值位元中設定的每個位元,您會得到一個 on 字串,而對於每個未設定的位元,您會得到一個 off 字串 |
FIELD() |
後續引數中第一個引數的索引(位置) |
FIND_IN_SET() |
第二個引數中第一個引數的索引(位置) |
FORMAT() |
傳回格式化為指定小數位數的數字 |
HEX() |
十進位或字串值的十六進位表示法 |
INSERT() |
在指定位置插入子字串,直到指定數量的字元 |
INSTR() |
傳回子字串第一次出現的索引 |
LCASE() |
LOWER() 的同義字 |
LEFT() |
傳回指定的最左邊字元數 |
LENGTH() |
傳回字串的位元組長度 |
LIKE |
簡單的模式比對 |
LOAD_FILE() |
載入具名的檔案 |
LOCATE() |
傳回子字串第一次出現的位置 |
LOWER() |
傳回小寫的引數 |
LPAD() |
傳回字串引數,左邊用指定的字串填補 |
LTRIM() |
移除開頭空格 |
MAKE_SET() |
傳回以逗號分隔的字串集合,這些字串在位元中具有對應的位元設定 |
MATCH() |
執行全文搜尋 |
MID() |
傳回從指定位置開始的子字串 |
NOT LIKE |
簡單模式比對的否定 |
NOT REGEXP |
REGEXP 的否定 |
OCT() |
傳回包含數字八進位表示的字串 |
OCTET_LENGTH() |
LENGTH() 的同義字 |
ORD() |
傳回引數最左邊字元的字元代碼 |
POSITION() |
LOCATE() 的同義字 |
QUOTE() |
跳脫引數以在 SQL 陳述式中使用 |
REGEXP |
字串是否符合正規表示式 |
REGEXP_INSTR() |
符合正規表示式的子字串的起始索引 |
REGEXP_LIKE() |
字串是否符合正規表示式 |
REGEXP_REPLACE() |
取代符合正規表示式的子字串 |
REGEXP_SUBSTR() |
傳回符合正規表示式的子字串 |
REPEAT() |
重複字串指定的次數 |
REPLACE() |
取代指定字串的出現次數 |
REVERSE() |
反轉字串中的字元 |
RIGHT() |
傳回指定的最右邊字元數 |
RLIKE |
字串是否符合正規表示式 |
RPAD() |
附加字串指定的次數 |
RTRIM() |
移除結尾空格 |
SOUNDEX() |
傳回 soundex 字串 |
SOUNDS LIKE |
比較發音 |
SPACE() |
傳回指定數量的空格字串 |
STRCMP() |
比較兩個字串 |
SUBSTR() |
傳回指定的子字串 |
SUBSTRING() |
傳回指定的子字串 |
SUBSTRING_INDEX() |
傳回指定分隔符號出現次數之前字串的子字串 |
TRIM() |
移除開頭和結尾空格 |
UCASE() |
UPPER() 的同義字 |
UNHEX() |
傳回包含數字十六進位表示的字串 |
UPPER() |
轉換為大寫 |
WEIGHT_STRING() |
傳回字串的權重字串 |
如果結果的長度大於 max_allowed_packet 系統變數的值,則字串值函數會傳回 NULL。請參閱第 7.1.1 節,「設定伺服器」。
對於在字串位置上運作的函數,第一個位置編號為 1。
對於採用長度引數的函數,非整數引數會四捨五入到最接近的整數。
傳回字串
str最左邊字元的數值。如果str是空字串,則傳回0。如果str是NULL,則傳回NULL。ASCII()適用於 8 位元字元。mysql> SELECT ASCII('2'); -> 50 mysql> SELECT ASCII(2); -> 50 mysql> SELECT ASCII('dx'); -> 100另請參閱
ORD()函數。傳回一個字串,表示
N的二進位值。N是一個 longlong (BIGINT) 數字。這等同於CONV(。如果N,10,2)N為NULL,則傳回NULL。mysql> SELECT BIN(12); -> '1100'傳回字串
str的位元長度。如果str為NULL,則傳回NULL。mysql> SELECT BIT_LENGTH('text'); -> 32CHAR(N,... [USINGcharset_name])CHAR()將每個引數N解譯為整數,並傳回一個字串,該字串由這些整數的程式碼值所給定的字元組成。NULL值會被跳過。mysql> SELECT CHAR(77,121,83,81,'76'); +--------------------------------------------------+ | CHAR(77,121,83,81,'76') | +--------------------------------------------------+ | 0x4D7953514C | +--------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHAR(77,77.3,'77.3'); +--------------------------------------------+ | CHAR(77,77.3,'77.3') | +--------------------------------------------+ | 0x4D4D4D | +--------------------------------------------+ 1 row in set (0.00 sec)預設情況下,
CHAR()傳回二進位字串。若要產生以指定字元集表示的字串,請使用選用的USING子句。mysql> SELECT CHAR(77,121,83,81,'76' USING utf8mb4); +---------------------------------------+ | CHAR(77,121,83,81,'76' USING utf8mb4) | +---------------------------------------+ | MySQL | +---------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHAR(77,77.3,'77.3' USING utf8mb4); +------------------------------------+ | CHAR(77,77.3,'77.3' USING utf8mb4) | +------------------------------------+ | MMM | +------------------------------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: '77.3' | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec)如果給定了
USING,且結果字串對於指定的字元集而言無效,則會發出警告。此外,如果啟用了嚴格 SQL 模式,則CHAR()的結果會變成NULL。如果從 mysql 用戶端內呼叫
CHAR(),則二進位字串會使用十六進位表示法顯示,具體取決於--binary-as-hex的值。如需該選項的詳細資訊,請參閱第 6.5.1 節,「mysql — MySQL 命令列用戶端」。CHAR()大於 255 的引數會轉換為多個結果位元組。例如,CHAR(256)等同於CHAR(1,0),而CHAR(256*256)等同於CHAR(1,0,0)。mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256)); +----------------+----------------+ | HEX(CHAR(1,0)) | HEX(CHAR(256)) | +----------------+----------------+ | 0100 | 0100 | +----------------+----------------+ 1 row in set (0.00 sec) mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256)); +------------------+--------------------+ | HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) | +------------------+--------------------+ | 010000 | 010000 | +------------------+--------------------+ 1 row in set (0.00 sec)傳回字串
str的長度,以程式碼點測量。多位元組字元計為單一程式碼點。這表示對於包含兩個 3 位元組字元的字串,LENGTH()傳回6,而CHAR_LENGTH()則傳回2,如下所示:mysql> SET @dolphin:='海豚'; Query OK, 0 rows affected (0.01 sec) mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin); +------------------+-----------------------+ | LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) | +------------------+-----------------------+ | 6 | 2 | +------------------+-----------------------+ 1 row in set (0.00 sec)如果
str為NULL,則CHAR_LENGTH()傳回NULL。CHARACTER_LENGTH()是CHAR_LENGTH()的同義詞。傳回串連引數所產生的字串。可以有一個或多個引數。如果所有引數都是非二進位字串,則結果為非二進位字串。如果引數包含任何二進位字串,則結果為二進位字串。數值引數會轉換為其對應的非二進位字串形式。
如果任何引數為
NULL,則CONCAT()傳回NULL。mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL mysql> SELECT CONCAT(14.3); -> '14.3'對於加上引號的字串,可以透過將字串彼此相鄰放置來執行串連。
mysql> SELECT 'My' 'S' 'QL'; -> 'MySQL'如果從 mysql 用戶端內呼叫
CONCAT(),則二進位字串結果會使用十六進位表示法顯示,具體取決於--binary-as-hex的值。如需該選項的詳細資訊,請參閱第 6.5.1 節,「mysql — MySQL 命令列用戶端」。CONCAT_WS(separator,str1,str2,...)CONCAT_WS()代表 Concatenate With Separator,它是CONCAT()的特殊形式。第一個引數是其餘引數的分隔符號。分隔符號會新增在要串連的字串之間。分隔符號可以是字串,其餘引數也可以是字串。如果分隔符號為NULL,則結果為NULL。mysql> SELECT CONCAT_WS(',', 'First name', 'Second name', 'Last Name'); -> 'First name,Second name,Last Name' mysql> SELECT CONCAT_WS(',', 'First name', NULL, 'Last Name'); -> 'First name,Last Name'CONCAT_WS()不會跳過空字串。但是,它會跳過分隔符號引數之後的任何NULL值。如果
N=1,則ELT()傳回字串清單的第N個元素:str1;如果N=2,則傳回str2,依此類推。如果N小於1、大於引數的數量或為NULL,則傳回NULL。ELT()是FIELD()的補數。mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Aa' mysql> SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Dd'EXPORT_SET(bits,on,off[,separator[,number_of_bits]])傳回一個字串,對於值
bits中設定的每個位元,您會得到一個on字串,而對於值中未設定的每個位元,您會得到一個off字串。會從右到左 (從低位到高位) 檢查bits中的位元。字串會從左到右新增到結果中,並以separator字串 (預設為逗號字元,) 分隔。檢查的位元數由number_of_bits給定,如果未指定,則預設為 64。number_of_bits如果大於 64,則會無訊息地截斷為 64。它會被視為不帶正負號的整數,因此值 -1 實際上與 64 相同。mysql> SELECT EXPORT_SET(5,'Y','N',',',4); -> 'Y,N,Y,N' mysql> SELECT EXPORT_SET(6,'1','0',',',10); -> '0,1,1,0,0,0,0,0,0,0'傳回
str在str1、str2、str3、...清單中的索引 (位置)。如果找不到str,則傳回0。如果
FIELD()的所有引數都是字串,則所有引數都會作為字串進行比較。如果所有引數都是數字,則會作為數字進行比較。否則,引數會作為雙精度數進行比較。如果
str為NULL,則傳回值為0,因為NULL無法與任何值進行相等比較。FIELD()是ELT()的補數。mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2 mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0如果字串
str在由N個子字串組成的字串清單strlist中,則傳回 1 到N範圍內的值。字串清單是由逗號 (,) 字元分隔的子字串組成的字串。如果第一個引數是常數字串,而第二個引數是SET類型的欄,則FIND_IN_SET()函式會經過最佳化,以使用位元算術。如果str不在strlist中,或如果strlist是空字串,則傳回0。如果任一引數為NULL,則傳回NULL。如果第一個引數包含逗號 (,) 字元,則此函式無法正常運作。mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2將數字
X格式化為類似'#,###,###.##'的格式,四捨五入到D個小數位數,並以字串形式傳回結果。如果D為0,則結果沒有小數點或小數部分。如果X或D為NULL,則該函式傳回NULL。選用的第三個參數允許指定用於結果數字小數點、千位分隔符號和分隔符號之間分組的地區設定。允許的地區設定值與
lc_time_names系統變數的合法值相同 (請參閱第 12.16 節,「MySQL 伺服器地區設定支援」)。如果地區設定為NULL或未指定,則預設地區設定為'en_US'。mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235' mysql> SELECT FORMAT(12332.1,4); -> '12,332.1000' mysql> SELECT FORMAT(12332.2,0); -> '12,332' mysql> SELECT FORMAT(12332.2,2,'de_DE'); -> '12.332,20'採用使用
TO_BASE64()使用的 Base-64 編碼規則編碼的字串,並以二進位字串形式傳回解碼結果。如果引數為NULL或不是有效的 Base-64 字串,則結果為NULL。如需有關編碼和解碼規則的詳細資訊,請參閱TO_BASE64()的說明。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'如果從 mysql 用戶端內呼叫
FROM_BASE64(),則二進位字串會使用十六進位表示法顯示。您可以透過在啟動 mysql 用戶端時,將--binary-as-hex的值設定為0來停用此行為。如需該選項的詳細資訊,請參閱第 6.5.1 節,「mysql — MySQL 命令列用戶端」。對於字串引數
str,HEX()會傳回str的十六進位字串表示法,其中str中每個字元的每個位元組都會轉換為兩個十六進位數字。(因此,多位元組字元會變成兩個以上的數字。)此作業的反向作業由UNHEX()函式執行。對於數值參數
N,HEX()會回傳一個十六進位字串,此字串代表將N視為 longlong (BIGINT) 數字的值。這等同於CONV(。此操作的反向操作由N,10,16)CONV(HEX(執行。N),16,10)對於
NULL參數,此函數回傳NULL。mysql> SELECT X'616263', HEX('abc'), UNHEX(HEX('abc')); -> 'abc', 616263, 'abc' mysql> SELECT HEX(255), CONV(HEX(255),16,10); -> 'FF', 255回傳字串
str,其中從位置pos開始,長度為len個字元的子字串會被字串newstr取代。如果pos不在字串長度範圍內,則回傳原始字串。如果len不在字串剩餘長度範圍內,則會從位置pos開始取代字串的其餘部分。如果有任何參數為NULL,則回傳NULL。mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic' mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); -> 'Quadratic' mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); -> 'QuWhat'此函數是多位元組安全的。
回傳子字串
substr在字串str中首次出現的位置。這與LOCATE()的雙參數形式相同,只是參數的順序相反。mysql> SELECT INSTR('foobarbar', 'bar'); -> 4 mysql> SELECT INSTR('xbar', 'foobar'); -> 0此函數是多位元組安全的,並且只有在至少一個參數是二進位字串時才會區分大小寫。如果任一參數為
NULL,此函數會回傳NULL。當儲存檢視表的定義時,檢視表中所使用的
LCASE()會被重寫為LOWER()。(錯誤 #12844279)回傳字串
str最左邊的len個字元,如果任何參數為NULL,則回傳NULL。mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'此函數是多位元組安全的。
回傳字串
str的長度,以位元組為單位測量。一個多位元組字元算作多個位元組。這表示對於包含五個 2 位元組字元的字串,LENGTH()會回傳10,而CHAR_LENGTH()會回傳5。如果str為NULL,則回傳NULL。mysql> SELECT LENGTH('text'); -> 4注意OpenGIS 空間函數
Length()在 MySQL 中命名為ST_Length()。讀取檔案並將檔案內容回傳為字串。要使用此函數,檔案必須位於伺服器主機上,您必須指定檔案的完整路徑名稱,並且您必須具有
FILE權限。該檔案必須可由伺服器讀取,並且其大小小於max_allowed_packet個位元組。如果secure_file_priv系統變數設定為非空目錄名稱,則要載入的檔案必須位於該目錄中。如果該檔案不存在或因不滿足上述其中一個條件而無法讀取,則該函數會回傳
NULL。character_set_filesystem系統變數控制作為文字字串給定的檔案名稱的解譯。mysql> UPDATE t SET blob_col=LOAD_FILE('/tmp/picture') WHERE id=1;LOCATE(,substr,str)LOCATE(substr,str,pos)第一個語法會回傳子字串
substr在字串str中首次出現的位置。第二個語法會回傳從位置pos開始,子字串substr在字串str中首次出現的位置。如果substr不在str中,則回傳0。如果任何參數為NULL,則回傳NULL。mysql> SELECT LOCATE('bar', 'foobarbar'); -> 4 mysql> SELECT LOCATE('xbar', 'foobar'); -> 0 mysql> SELECT LOCATE('bar', 'foobarbar', 5); -> 7此函數是多位元組安全的,並且只有在至少一個參數是二進位字串時才會區分大小寫。
根據目前的字元集對應表,回傳字串
str,其中所有字元都已變更為小寫,如果str為NULL,則回傳NULL。預設字元集為utf8mb4。mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically'當套用至二進位字串 (
BINARY、VARBINARY、BLOB) 時,LOWER()(和UPPER())無效。若要對二進位字串執行字母大小寫轉換,請先使用適用於字串中儲存之資料的字元集,將其轉換為非二進位字串mysql> SET @str = BINARY 'New York'; mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4)); +-------------+------------------------------------+ | LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) | +-------------+------------------------------------+ | New York | new york | +-------------+------------------------------------+對於 Unicode 字元集的排序規則,如果排序規則名稱中有 Unicode 校對演算法 (UCA) 版本,
LOWER()和UPPER()會根據該版本運作,如果未指定版本,則根據 UCA 4.0.0 運作。例如,utf8mb4_0900_ai_ci和utf8mb3_unicode_520_ci分別根據 UCA 9.0.0 和 5.2.0 運作,而utf8mb3_unicode_ci根據 UCA 4.0.0 運作。請參閱 第 12.10.1 節「Unicode 字元集」。此函數是多位元組安全的。
檢視表中使用的
LCASE()會被重寫為LOWER()。回傳字串
str,使用字串padstr在左側填補至長度為len個字元。如果str長於len,則傳回值會縮短為len個字元。mysql> SELECT LPAD('hi',4,'??'); -> '??hi' mysql> SELECT LPAD('hi',1,'??'); -> 'h'如果其任何引數為
NULL,則回傳NULL。回傳已移除前導空白字元的字串
str。如果str為NULL,則回傳NULL。mysql> SELECT LTRIM(' barbar'); -> 'barbar'此函數是多位元組安全的。
回傳一個設定值(一個包含由
,字元分隔的子字串的字串),該設定值包含在bits中設定了對應位元的字串。str1對應於位元 0,str2對應於位元 1,依此類推。str1、str2、...中的NULL值不會附加至結果。mysql> SELECT MAKE_SET(1,'a','b','c'); -> 'a' mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world'); -> 'hello,world' mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world'); -> 'hello' mysql> SELECT MAKE_SET(0,'a','b','c'); -> ''回傳
N的八進位值的字串表示法,其中N是一個 longlong (BIGINT) 數字。這等同於CONV(。如果N,10,8)N為NULL,則回傳NULL。mysql> SELECT OCT(12); -> '14'OCTET_LENGTH()是LENGTH()的同義詞。如果字串
str最左邊的字元是多位元組字元,則使用此公式從其組成位元組的數值計算該字元的代碼(1st byte code) + (2nd byte code * 256) + (3rd byte code * 256^2) ...如果最左邊的字元不是多位元組字元,則
ORD()會傳回與ASCII()函數相同的值。如果str為NULL,則函數會回傳NULL。mysql> SELECT ORD('2'); -> 50將字串加上引號,以產生可用於 SQL 陳述式中,經過適當跳脫處理的資料值。傳回的字串會以單引號括住,並且每個反斜線 (
\)、單引號 (')、ASCIINUL和 Control+Z 的實例前面都會加上反斜線。如果引數為NULL,則傳回值為單字 「NULL」,不包含外面的單引號。mysql> SELECT QUOTE('Don\'t!'); -> 'Don\'t!' mysql> SELECT QUOTE(NULL); -> NULL作為比較,請參閱第 11.1.1 節, 「字串文字」以及mysql_real_escape_string_quote()中,字串文字和 C API 內的引號規則。
傳回一個由字串
str重複count次所組成的字串。如果count小於 1,則傳回空字串。如果str或count為NULL,則傳回NULL。mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL'傳回字串
str,其中所有出現的字串from_str都會被字串to_str取代。REPLACE()在搜尋from_str時會執行區分大小寫的匹配。mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -> 'WwWwWw.mysql.com'此函數是多位元組安全。如果任何引數為
NULL,則傳回NULL。傳回字元順序反轉的字串
str,如果str為NULL,則傳回NULL。mysql> SELECT REVERSE('abc'); -> 'cba'此函數是多位元組安全的。
傳回字串
str最右邊的len個字元,如果任何引數為NULL,則傳回NULL。mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'此函數是多位元組安全的。
傳回字串
str,在右邊使用字串padstr填補到長度為len個字元。如果str比len長,則傳回值會縮短為len個字元。如果str、padstr或len為NULL,則此函數會傳回NULL。mysql> SELECT RPAD('hi',5,'?'); -> 'hi???' mysql> SELECT RPAD('hi',1,'?'); -> 'h'此函數是多位元組安全的。
傳回移除尾隨空白字元的字串
str。mysql> SELECT RTRIM('barbar '); -> 'barbar'此函數是多位元組安全,如果
str為NULL,則傳回NULL。從
str傳回一個 soundex 字串,如果str為NULL,則傳回NULL。兩個聽起來幾乎相同的字串應該具有相同的 soundex 字串。標準 soundex 字串長度為四個字元,但SOUNDEX()函數會傳回任意長度的字串。您可以使用結果上的SUBSTRING()來取得標準 soundex 字串。會忽略str中所有非字母字元。A-Z 範圍之外的所有國際字母字元都視為母音。重要使用
SOUNDEX()時,您應該注意以下限制此函數目前實作的方式,僅適用於英文的字串。其他語言的字串可能無法產生可靠的結果。
此函數不保證能為使用多位元組字元集(包括
utf-8)的字串提供一致的結果。請參閱錯誤 #22638 以取得更多資訊。
mysql> SELECT SOUNDEX('Hello'); -> 'H400' mysql> SELECT SOUNDEX('Quadratically'); -> 'Q36324'注意此函數實作原始的 Soundex 演算法,而不是更常用的增強版本(D. Knuth 也有描述)。差異在於原始版本會先捨棄母音,再捨棄重複項,而增強版本會先捨棄重複項,再捨棄母音。
傳回一個由
N個空白字元組成的字串,如果N為NULL,則傳回NULL。mysql> SELECT SPACE(6); -> ' 'SUBSTR(、str,pos)SUBSTR(、strFROMpos)SUBSTR(、str,pos,len)SUBSTR(strFROMposFORlen)SUBSTR()是SUBSTRING()的同義詞。SUBSTRING(、str,pos)SUBSTRING(、strFROMpos)SUBSTRING(、str,pos,len)SUBSTRING(strFROMposFORlen)不含
len引數的形式,會傳回從字串str中,從位置pos開始的子字串。含有len引數的形式,會傳回從字串str中,從位置pos開始,長度為len個字元的子字串。使用FROM的形式是標準 SQL 語法。也可以為pos使用負值。在這種情況下,子字串的開頭是從字串結尾算起pos個字元,而不是從開頭算起。在任何形式的這個函數中,都可以為pos使用負值。pos的值為 0 會傳回空字串。對於所有形式的
SUBSTRING(),要擷取子字串的字串中,第一個字元的位置計算為1。mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila' mysql> SELECT SUBSTRING('Sakila', -5, 3); -> 'aki' mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki'此函數是多位元組安全。如果任何引數為
NULL,則傳回NULL。如果
len小於 1,結果會是空字串。SUBSTRING_INDEX(str,delim,count)傳回字串
str中,在delim定界符出現count次之前的部分子字串。如果count為正數,則傳回最後一個定界符(從左邊算起)左邊的所有內容。如果count為負數,則傳回最後一個定界符(從右邊算起)右邊的所有內容。搜尋delim時,SUBSTRING_INDEX()會執行區分大小寫的匹配。mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -> 'www.mysql' mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -> 'mysql.com'此函數是多位元組安全的。
如果任何引數為
NULL,SUBSTRING_INDEX()會傳回NULL。將字串引數轉換為 base-64 編碼形式,並將結果以連線字元集和定序作為字元字串傳回。如果引數不是字串,則會在轉換發生之前將其轉換為字串。如果引數為
NULL,則結果為NULL。可以使用FROM_BASE64()函數解碼 Base-64 編碼的字串。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'存在不同的 base-64 編碼配置。
TO_BASE64()和FROM_BASE64()使用的編碼和解碼規則如下字母值 62 的編碼為
'+'。字母值 63 的編碼為
'/'。編碼輸出由 4 個可列印字元組成的群組組成。每個輸入資料的 3 個位元組都使用 4 個字元進行編碼。如果最後一個群組不完整,則會使用
'='字元填補至長度為 4。編碼輸出每 76 個字元後會加上一個換行符號,將長輸出分成多行。
解碼會辨識並忽略換行符號、歸位字元、Tab 和空格。
TRIM([{BOTH | LEADING | TRAILING} [、remstr] FROM]str)TRIM([remstrFROM]str)傳回移除所有
remstr前置詞或後綴的字串str。如果未指定BOTH、LEADING或TRAILING任何一個指定詞,則會假設為BOTH。remstr是可選的,如果未指定,則會移除空格。mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'此函數是多位元組安全。如果任何引數為
NULL,則傳回NULL。在檢視中使用的
UCASE()會改寫為UPPER()。對於字串引數
str,UNHEX(會將引數中的每對字元視為十六進位數字,並將其轉換為該數字所代表的位元組。傳回值為二進位字串。str)mysql> SELECT UNHEX('4D7953514C'); -> 'MySQL' mysql> SELECT X'4D7953514C'; -> 'MySQL' mysql> SELECT UNHEX(HEX('string')); -> 'string' mysql> SELECT HEX(UNHEX('1267')); -> '1267'引數字串中的字元必須是合法的十六進位數字:
'0'..'9'、'A'..'F'、'a'..'f'。如果引數包含任何非十六進位數字,或本身為NULL,則結果為NULL。mysql> SELECT UNHEX('GG'); +-------------+ | UNHEX('GG') | +-------------+ | NULL | +-------------+ mysql> SELECT UNHEX(NULL); +-------------+ | UNHEX(NULL) | +-------------+ | NULL | +-------------+如果
UNHEX()的引數是BINARY資料行,也可能發生NULL結果,因為值在儲存時會以0x00位元組填補,但在擷取時不會移除這些位元組。例如,'41'會以'41 '儲存到CHAR(3)資料行中,並以'41'擷取(移除尾隨的填補空格),因此該資料行值的UNHEX()會傳回X'41'。相反地,'41'會以'41\0'儲存到BINARY(3)資料行中,並以'41\0'擷取(未移除尾隨的填補0x00位元組)。'\0'不是合法的十六進位數字,因此該資料行值的UNHEX()會傳回NULL。對於數值引數
N,UNHEX()不會執行HEX(的反向操作。請改用N)CONV(HEX(。請參閱N),16,10)HEX()的說明。如果從 mysql 用戶端內呼叫
UNHEX(),則二進位字串會使用十六進位標記法顯示,具體取決於--binary-as-hex的值。如需該選項的詳細資訊,請參閱第 6.5.1 節「mysql — MySQL 命令列用戶端」。根據目前的字元集對應,傳回將所有字元變更為大寫的字串
str,如果str為NULL,則傳回NULL。預設字元集為utf8mb4。mysql> SELECT UPPER('Hej'); -> 'HEJ'請參閱
LOWER()的說明,其中也適用於UPPER()。這包括如何針對這些函式無效的二進位字串(BINARY、VARBINARY、BLOB)執行字母大小寫轉換,以及有關 Unicode 字元集的大小寫摺疊的資訊。此函數是多位元組安全的。
在檢視中使用的
UCASE()會改寫為UPPER()。WEIGHT_STRING(str[AS {CHAR|BINARY}(N)] [flags])此函式會傳回輸入字串的權重字串。傳回值是一個二進位字串,表示字串的比較和排序值,如果引數為
NULL,則傳回NULL。它具有以下屬性:如果
WEIGHT_STRING(=str1)WEIGHT_STRING(,則str2)(str1=str2str1和str2被視為相等)如果
WEIGHT_STRING(<str1)WEIGHT_STRING(,則str2)(str1<str2str1的排序會在str2之前)
WEIGHT_STRING()是一個除錯函式,旨在供內部使用。其行為可能會在 MySQL 版本之間變更,恕不另行通知。它可用於測試和除錯定序,特別是當您要新增新的定序時。請參閱第 12.14 節「將定序新增至字元集」。此清單簡要總結了引數。在清單後面的討論中會提供更多詳細資訊。
str:輸入字串運算式。AS子句:選用;將輸入字串轉換為指定的類型和長度。flags:選用;未使用。
輸入字串
str是一個字串運算式。如果輸入是非二進位(字元)字串,例如CHAR、VARCHAR或TEXT值,則傳回值會包含字串的定序權重。如果輸入是二進位(位元組)字串,例如BINARY、VARBINARY或BLOB值,則傳回值與輸入相同(二進位字串中每個位元組的權重都是位元組值)。如果輸入為NULL,則WEIGHT_STRING()會傳回NULL。範例
mysql> SET @s = _utf8mb4 'AB' COLLATE utf8mb4_0900_ai_ci; mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 1C471C60 | +------+---------+------------------------+mysql> SET @s = _utf8mb4 'ab' COLLATE utf8mb4_0900_ai_ci; mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 1C471C60 | +------+---------+------------------------+mysql> SET @s = CAST('AB' AS BINARY); mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 4142 | +------+---------+------------------------+mysql> SET @s = CAST('ab' AS BINARY); mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 6162 | +------+---------+------------------------+先前的範例使用
HEX()來顯示WEIGHT_STRING()結果。由於結果是二進位值,因此當結果包含非列印值時,HEX()特別有用,可用於以可列印的形式顯示它。mysql> SET @s = CONVERT(X'C39F' USING utf8mb4) COLLATE utf8mb4_czech_ci; mysql> SELECT HEX(WEIGHT_STRING(@s)); +------------------------+ | HEX(WEIGHT_STRING(@s)) | +------------------------+ | 0FEA0FEA | +------------------------+對於非
NULL的傳回值,如果值的長度在VARBINARY的最大長度內,則值的資料類型為VARBINARY,否則資料類型為BLOB。可以指定
AS子句,將輸入字串轉換為非二進位或二進位字串,並強制其為指定的長度。AS CHAR(會將字串轉換為非二進位字串,並在右側以空格填補,使其長度達到N)N個字元。N必須至少為 1。如果N小於輸入字串的長度,則會將字串截斷為N個字元。截斷不會發生警告。AS BINARY(類似,但會將字串轉換為二進位字串,N)N以位元組(而非字元)為單位測量,並且填補會使用0x00位元組(而非空格)。
mysql> SET NAMES 'latin1'; mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4))); +-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 41422020 | +-------------------------------------+ mysql> SET NAMES 'utf8mb4'; mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4))); +-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 1C471C60 | +-------------------------------------+mysql> SELECT HEX(WEIGHT_STRING('ab' AS BINARY(4))); +---------------------------------------+ | HEX(WEIGHT_STRING('ab' AS BINARY(4))) | +---------------------------------------+ | 61620000 | +---------------------------------------+flags子句目前未使用。如果從 mysql 用戶端內呼叫
WEIGHT_STRING(),則二進位字串會使用十六進位標記法顯示,具體取決於--binary-as-hex的值。如需該選項的詳細資訊,請參閱第 6.5.1 節「mysql — MySQL 命令列用戶端」。