MySQL 提供豐富的字串函數支援資料清洗、報表格式化、全文搜尋等場景。本文為上篇,涵蓋進制轉換、長度計算、子字串定位、左右填充與截取等核心函數,附帶實測範例與多位元組字元支援說明。
SELECT ASCII('2'); -- 50
SELECT ASCII('dx'); -- 100 (僅看 'd')
SELECT ORD('漢'); -- 多位元組碼值
任意進制(2-36)互轉,支援正負號、64 位精度
SELECT CONV('a', 16, 2); -- '1010'
SELECT CONV('6E', 18, 8); -- '172'
SELECT CONV(-17, 10, -18); -- '-H' (負數目標進制視為有號)
SELECT CONV(10+'10'+'10'+0xa, 10, 10); -- '40'
SELECT BIN(12); -- '1100' SELECT OCT(12); -- '14' SELECT HEX(255); -- 'FF'
整數序列轉字元字串,跳過 NULL
SELECT CHAR(77,121,83,81,76); -- 'MySQL' SELECT CHAR(77,77.3,'77.3'); -- 'MMM' (截取整數部)
SELECT CONCAT('My','S','QL'); -- 'MySQL'
SELECT CONCAT('My', NULL, 'QL'); -- NULL
SELECT CONCAT(14.3); -- '14.3'
| 函數 | 語意 | 多位元組行為 |
|---|---|---|
| LENGTH(str) / OCTET_LENGTH(str) | 位元組長度 | 每字元計算實際位元組數 |
| CHAR_LENGTH(str) / CHARACTER_LENGTH(str) | 字元長度 | 每字元計 1,不論位元組數 |
SELECT LENGTH('text'); -- 4
SELECT CHAR_LENGTH('漢字'); -- 2 (UTF8 下 LENGTH=6)
SELECT LOCATE('bar', 'foobarbar'); -- 4
SELECT LOCATE('xbar', 'foobar'); -- 0
從指定位置 `pos` 開始搜尋
SELECT LOCATE('bar', 'foobarbar', 5); -- 7
參數順序相反的 `LOCATE(str, substr)`,同樣多位元組安全
SELECT INSTR('foobarbar', 'bar'); -- 4
SELECT LPAD('hi', 4, '??'); -- '??hi'
SELECT RPAD('hi', 5, '?'); -- 'hi???'
SELECT LEFT('foobarbar', 5); -- 'fooba'
SELECT RIGHT('foobarbar', 4); -- 'rbar'
標註「多位元組安全」的函數(LOCATE/INSTR/LEFT/RIGHT 等)正確處理 UTF8/GBK 等多位元組編碼,**不會**將單一字元拆分。長度計算請依業務選擇 `LENGTH`(位元組)或 `CHAR_LENGTH`(字元數)。
下篇將涵蓋 SUBSTRING、REPLACE、TRIM、大小寫轉換、比較、格式化等進階字串函數。