文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙尺寸) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  函數和運算子  /  字串函數和運算子

14.8 字串函數和運算子

表 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。

對於採用長度引數的函數,非整數引數會四捨五入到最接近的整數。

  • ASCII(str)

    傳回字串 str 最左側字元的數值。如果 str 是空字串,則傳回 0。如果 strNULL,則傳回 NULLASCII() 適用於 8 位元字元。

    mysql> SELECT ASCII('2');
            -> 50
    mysql> SELECT ASCII(2);
            -> 50
    mysql> SELECT ASCII('dx');
            -> 100

    另請參閱 ORD() 函數。

  • BIN(N)

    傳回 N 的二進位值字串表示法,其中 N 是一個 longlong (BIGINT) 數字。這等同於 CONV(N,10,2)。如果 NNULL,則傳回 NULL

    mysql> SELECT BIN(12);
            -> '1100'
  • BIT_LENGTH(str)

    傳回字串 str 的位元長度。如果 strNULL,則傳回 NULL

    mysql> SELECT BIT_LENGTH('text');
            -> 32
  • CHAR(N,... [USING charset_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)
  • CHAR_LENGTH(str)

    傳回字串 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)

    如果 strNULLCHAR_LENGTH() 會傳回 NULL

  • CHARACTER_LENGTH(str)

    CHARACTER_LENGTH()CHAR_LENGTH() 的同義詞。

  • CONCAT(str1,str2,...)

    傳回由引數串連而成的字串。可以有一個或多個引數。如果所有引數都是非二進位字串,則結果會是非二進位字串。如果引數包含任何二進位字串,則結果會是二進位字串。數值引數會轉換為其等效的非二進位字串格式。

    如果任何引數為 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 值。

  • ELT(N,str1,str2,str3,...)

    ELT() 會傳回字串清單的第 N 個元素:如果 N = 1,則為 str1,如果 N = 2,則為 str2,依此類推。如果 N 小於 1、大於引數數量或為 NULL,則傳回 NULLELT()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'
  • FIELD(str,str1,str2,str3,...)

    傳回 strstr1str2str3... 清單中的索引 (位置)。如果找不到 str,則傳回 0

    如果 FIELD() 的所有引數都是字串,則會將所有引數視為字串進行比較。如果所有引數都是數字,則會將它們視為數字進行比較。否則,會將引數視為 double 進行比較。

    如果 strNULL,則傳回值為 0,因為 NULL 無法與任何值進行相等比較。FIELD()ELT() 的補充。

    mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
            -> 2
    mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
            -> 0
  • FIND_IN_SET(str,strlist)

    如果字串 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
  • FORMAT(X,D[,locale])

    將數字 X 格式化為類似 '#,###,###.##' 的格式,四捨五入到 D 個小數位數,並將結果傳回為字串。如果 D0,則結果沒有小數點或小數部分。如果 XDNULL,則函式會傳回 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'
  • FROM_BASE64(str)

    接受使用 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 命令列用戶端」

  • HEX(str)HEX(N)

    對於字串引數 strHEX() 會傳回 str 的十六進位字串表示法,其中 str 中每個字元的每個位元組都會轉換為兩個十六進位數字。(因此,多位元組字元會變成兩個以上的數字。) 此操作的反向操作由 UNHEX() 函式執行。

    對於數值引數 NHEX() 會傳回將 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
  • INSERT(str,pos,len,newstr)

    傳回字串 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'

    此函式是多位元組安全的。

  • INSTR(str,substr)

    傳回子字串 substr 在字串 str 中第一次出現的位置。這與 LOCATE() 的雙引數形式相同,但引數順序已反轉。

    mysql> SELECT INSTR('foobarbar', 'bar');
            -> 4
    mysql> SELECT INSTR('xbar', 'foobar');
            -> 0

    此函式是多位元組安全的,且僅在至少有一個引數是二進位字串時才區分大小寫。如果任一引數為 NULL,則此函式會傳回 NULL

  • LCASE(str)

    LCASE()LOWER() 的同義詞。

    在檢視中使用的 LCASE() 會在儲存檢視的定義時重寫為 LOWER()。(Bug #12844279)

  • LEFT(str,len)

    傳回字串 str 中最左邊的 len 個字元,如果任何引數為 NULL,則傳回 NULL

    mysql> SELECT LEFT('foobarbar', 5);
            -> 'fooba'

    此函式是多位元組安全的。

  • LENGTH(str)

    傳回字串 str 的長度,以位元組為單位測量。多位元組字元算作多個位元組。這表示對於包含五個 2 位元組字元的字串,LENGTH() 會傳回 10,而 CHAR_LENGTH() 會傳回 5。如果 strNULL,則傳回 NULL

    mysql> SELECT LENGTH('text');
            -> 4
    注意

    OpenGIS 空間函式 Length() 在 MySQL 中命名為 ST_Length()

  • LOAD_FILE(file_name)

    讀取檔案並傳回檔案內容作為字串。若要使用此函式,檔案必須位於伺服器主機上,您必須指定檔案的完整路徑名稱,而且您必須具有 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 中第一次出現的位置。第二個語法會傳回子字串 substr 在字串 str 中從位置 pos 開始第一次出現的位置。如果 substr 不在 str 中,則傳回 0。如果任何引數為 NULL,則傳回 NULL

    mysql> SELECT LOCATE('bar', 'foobarbar');
            -> 4
    mysql> SELECT LOCATE('xbar', 'foobar');
            -> 0
    mysql> SELECT LOCATE('bar', 'foobarbar', 5);
            -> 7

    此函式是多位元組安全的,且僅在至少有一個引數是二進位字串時才區分大小寫。

  • LOWER(str)

    傳回字串 str,其中所有字元都根據目前的字元集對應變更為小寫,如果 strNULL,則傳回 NULL。預設字元集為 utf8mb4

    mysql> SELECT LOWER('QUADRATICALLY');
            -> 'quadratically'

    LOWER() (和 UPPER()) 在應用於二進位字串時 ( BINARYVARBINARYBLOB) 無效。若要對二進位字串執行字母大小寫轉換,請先使用適合儲存在字串中的資料的字元集,將其轉換為非二進位字串

    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_ciutf8mb3_unicode_520_ci 會分別依照 UCA 9.0.0 和 5.2.0 運作,而 utf8mb3_unicode_ci 則依照 UCA 4.0.0 運作。請參閱第 12.10.1 節「Unicode 字元集」

    此函式是多位元組安全的。

    在檢視中使用的 LCASE() 會重寫為 LOWER()

  • LPAD(str,len,padstr)

    傳回字串 str,在左邊使用字串 padstr 填補,直到長度達到 len 個字元。如果 strlen 長,則傳回值會縮短為 len 個字元。

    mysql> SELECT LPAD('hi',4,'??');
            -> '??hi'
    mysql> SELECT LPAD('hi',1,'??');
            -> 'h'

    如果其任何引數為 NULL,則傳回 NULL

  • LTRIM(str)

    傳回移除前導空格字元的字串 str。如果 strNULL,則傳回 NULL

    mysql> SELECT LTRIM('  barbar');
            -> 'barbar'

    此函式是多位元組安全的。

  • MAKE_SET(bits,str1,str2,...)

    傳回一個設定值 (一個包含以 , 字元分隔的子字串的字串),其中包含在 bits 中設定了對應位元的字串。str1 對應於位元 0、str2 對應於位元 1,依此類推。不會將 str1str2... 中的 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');
            -> ''
  • MID(str,pos,len)

    MID(str,pos,len)SUBSTRING(str,pos,len) 的同義詞。

  • OCT(N)

    傳回 N 的八進位值的字串表示法,其中 N 是 longlong (BIGINT) 數字。這等同於 CONV(N,10,8)。如果 NNULL,則傳回 NULL

    mysql> SELECT OCT(12);
            -> '14'
  • OCTET_LENGTH(str)

    OCTET_LENGTH()LENGTH() 的同義詞。

  • ORD(str)

    如果字串 str 最左邊的字元是多位元組字元,則傳回該字元的程式碼,該程式碼是使用此公式從其構成位元組的數值計算而得

      (1st byte code)
    + (2nd byte code * 256)
    + (3rd byte code * 256^2) ...

    如果最左邊的字元不是多位元組字元,則 ORD() 會傳回與 ASCII() 函式相同的值。如果 strNULL,則函式會傳回 NULL

    mysql> SELECT ORD('2');
            -> 50
  • POSITION(substr IN str)

    POSITION(substr IN str)LOCATE(substr,str) 的同義詞。

  • QUOTE(str)

    將字串加上引號,以產生可在 SQL 陳述式中用作正確跳脫字元資料值的结果。傳回的字串會以單引號括住,且每個反斜線 (\)、單引號 (')、ASCII NUL 和 Control+Z 的實例前面都會加上反斜線。如果引數是 NULL,則傳回值為 NULL 這個詞,且不含括住的單引號。

    mysql> SELECT QUOTE('Don\'t!');
            -> 'Don\'t!'
    mysql> SELECT QUOTE(NULL);
            -> NULL

    若要比較,請參閱第 11.1.1 節「字串字面值」中的文字字串以及 C API 中的引號規則,以及mysql_real_escape_string_quote()

  • REPEAT(str,count)

    傳回一個由字串 str 重複 count 次所組成的字串。如果 count 小於 1,則傳回空字串。如果 strcountNULL,則傳回 NULL

    mysql> SELECT REPEAT('MySQL', 3);
            -> 'MySQLMySQLMySQL'
  • REPLACE(str,from_str,to_str)

    傳回字串 str,其中所有出現的字串 from_str 都會被字串 to_str 取代。REPLACE() 在搜尋 from_str 時會執行區分大小寫的比對。

    mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
            -> 'WwWwWw.mysql.com'

    此函式是多位元組安全的。如果任何引數是 NULL,則會傳回 NULL

  • REVERSE(str)

    傳回字元順序反轉的字串 str,如果 strNULL,則傳回 NULL

    mysql> SELECT REVERSE('abc');
            -> 'cba'

    此函式是多位元組安全的。

  • RIGHT(str,len)

    從字串 str 傳回最右邊的 len 個字元,如果任何引數是 NULL,則傳回 NULL

    mysql> SELECT RIGHT('foobarbar', 4);
            -> 'rbar'

    此函式是多位元組安全的。

  • RPAD(str,len,padstr)

    傳回字串 str,並在右側以字串 padstr 填補至 len 個字元的長度。如果 str 長度大於 len,則傳回值會縮短為 len 個字元。如果 strpadstrlenNULL,則函式會傳回 NULL

    mysql> SELECT RPAD('hi',5,'?');
            -> 'hi???'
    mysql> SELECT RPAD('hi',1,'?');
            -> 'h'

    此函式是多位元組安全的。

  • RTRIM(str)

    傳回移除尾隨空格字元的字串 str

    mysql> SELECT RTRIM('barbar   ');
            -> 'barbar'

    此函式是多位元組安全的,且如果 strNULL,則會傳回 NULL

  • SOUNDEX(str)

    str 傳回 soundex 字串,如果 strNULL,則傳回 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 也有描述)。差異在於原始版本會先捨棄母音,再捨棄重複字元,而增強版本則會先捨棄重複字元,再捨棄母音。

  • expr1 SOUNDS LIKE expr2

    這與 SOUNDEX(expr1) = SOUNDEX(expr2) 相同。

  • SPACE(N)

    傳回一個由 N 個空格字元組成的字串,如果 NNULL,則傳回 NULL

    mysql> SELECT SPACE(6);
            -> '      '
  • SUBSTR(str,pos)SUBSTR(str FROM pos)SUBSTR(str,pos,len)SUBSTR(str FROM pos FOR len)

    SUBSTR()SUBSTRING() 的同義詞。

  • SUBSTRING(str,pos)SUBSTRING(str FROM pos)SUBSTRING(str,pos,len)SUBSTRING(str FROM pos FOR len)

    不含 len 引數的形式會從字串 str 中傳回一個子字串,該子字串從位置 pos 開始。含有 len 引數的形式會從字串 str 中傳回長度為 len 個字元的子字串,該子字串從位置 pos 開始。使用 FROM 的形式是標準 SQL 語法。也可以使用 pos 的負值。在此情況下,子字串的開頭是從字串結尾算起的 pos 個字元,而不是從開頭算起。在此函式的任何形式中,都可以將負值用於 pospos 的值為 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 中傳回分隔符 delimcount 次出現之前/之後的子字串。如果 count 為正數,則會傳回最後一個分隔符 (從左邊算起) 的左邊所有內容。如果 count 為負數,則會傳回最後一個分隔符 (從右邊算起) 的右邊所有內容。SUBSTRING_INDEX() 在搜尋 delim 時會執行區分大小寫的比對。

    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
            -> 'www.mysql'
    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
            -> 'mysql.com'

    此函式是多位元組安全的。

    如果任何引數是 NULLSUBSTRING_INDEX() 會傳回 NULL

  • TO_BASE64(str)

    將字串引數轉換為 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 個字元後會加入一個換行符號,以將長輸出分成多行。

    • 解碼會識別並忽略換行符號、歸位字元、索引標籤和空格。

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)TRIM([remstr FROM] str)

    傳回移除所有 remstr 前置詞或後置詞的字串 str。如果未提供 BOTHLEADINGTRAILING 等指定詞,則會假設為 BOTHremstr 是選用的,如果未指定,則會移除空格。

    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(str)

    UCASE()UPPER() 的同義詞。

    在檢視中使用的 UCASE() 會重新寫為 UPPER()

  • UNHEX(str)

    對於字串引數 strUNHEX(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

    對於數值引數 NUNHEX() 不會執行 HEX(N) 的反向操作。請改用 CONV(HEX(N),16,10)。請參閱 HEX() 的描述。

    如果從 mysql 用戶端內呼叫 UNHEX(),二進位字串會使用十六進位表示法顯示,這取決於 --binary-as-hex 的值。有關該選項的更多資訊,請參閱第 6.5.1 節,「mysql — MySQL 命令列用戶端」

  • UPPER(str)

    根據目前的字元集對應,傳回字串 str 中所有字元都變為大寫的結果,如果 strNULL,則傳回 NULL。預設的字元集為 utf8mb4

    mysql> SELECT UPPER('Hej');
            -> 'HEJ'

    請參閱 LOWER() 的描述,其中包含也適用於 UPPER() 的資訊。這包括如何對二進位字串(BINARYVARBINARYBLOB)執行字母大小寫轉換(這些函式對它們無效),以及有關 Unicode 字元集的大小寫摺疊的資訊。

    此函式是多位元組安全的。

    在檢視中使用的 UCASE() 會重新寫為 UPPER()

  • WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])

    此函式傳回輸入字串的權重字串。傳回值是一個二進位字串,表示字串的比較和排序值;如果引數為 NULL,則傳回 NULL。它具有以下屬性:

    WEIGHT_STRING() 是一個用於內部使用的除錯函式。其行為可能會在 MySQL 版本之間變更,恕不另行通知。它可以用於排序規則的測試和除錯,尤其是在您新增新的排序規則時。請參閱第 12.14 節,「為字元集新增排序規則」

    此清單簡要總結了引數。更多詳細資訊將在清單之後的討論中提供。

    • str:輸入字串運算式。

    • AS 子句:可選;將輸入字串轉換為給定的類型和長度。

    • flags:可選;未使用。

    輸入字串 str 是一個字串運算式。如果輸入是非二進位(字元)字串,例如 CHARVARCHARTEXT 值,則傳回值包含該字串的排序規則權重。如果輸入是二進位(位元組)字串,例如 BINARYVARBINARYBLOB 值,則傳回值與輸入相同(二進位字串中每個位元組的權重都是位元組值)。如果輸入為 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 命令列用戶端」