首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 字串函數完整參考手冊(上):轉換、長度、搜尋與填充操作

     編輯:MySQL 綜合教學

前言:字串處理的核心工具箱

MySQL 提供豐富的字串函數支援資料清洗、報表格式化、全文搜尋等場景。本文為上篇,涵蓋進制轉換、長度計算、子字串定位、左右填充與截取等核心函數,附帶實測範例與多位元組字元支援說明。

一、字元編碼與進制轉換函數

ASCII(str) / ORD(str)

  • `ASCII()`:回傳最左字元 ASCII 碼,空字串回 0,NULL 回 NULL
  • `ORD()`:多位元組字元回傳合併碼值 `(first*256+second)*256+...`,單位元組同 ASCII
SELECT ASCII('2');    -- 50
SELECT ASCII('dx');   -- 100 (僅看 'd')
SELECT ORD('漢');      -- 多位元組碼值

CONV(N, from_base, to_base)

任意進制(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'

快捷進制轉換:BIN/OCT/HEX

  • `BIN(N)` ≡ `CONV(N,10,2)` 二進位字串
  • `OCT(N)` ≡ `CONV(N,10,8)` 八進位字串
  • `HEX(N)` ≡ `CONV(N,10,16)` 十六進位字串
SELECT BIN(12);   -- '1100'
SELECT OCT(12);   -- '14'
SELECT HEX(255);  -- 'FF'

CHAR(N,...)

整數序列轉字元字串,跳過 NULL

SELECT CHAR(77,121,83,81,76);  -- 'MySQL'
SELECT CHAR(77,77.3,'77.3');   -- 'MMM' (截取整數部)

二、字串連結與長度計算

CONCAT(str1, str2, ...)

  • 任意參數連結,任一 NULL 結果為 NULL
  • 數值自動轉字串
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)

三、子字串搜尋與定位

LOCATE(substr, str) / POSITION(substr IN str)

  • 回傳 `substr` 在 `str` 首次出現位置(1-based),找不到回 0
  • 多位元組安全
SELECT LOCATE('bar', 'foobarbar');  -- 4
SELECT LOCATE('xbar', 'foobar');    -- 0

LOCATE(substr, str, pos)

從指定位置 `pos` 開始搜尋

SELECT LOCATE('bar', 'foobarbar', 5);  -- 7

INSTR(str, substr)

參數順序相反的 `LOCATE(str, substr)`,同樣多位元組安全

SELECT INSTR('foobarbar', 'bar');  -- 4

四、填充與截取操作

LPAD(str, len, padstr) / RPAD(str, len, padstr)

  • 左/右側以 `padstr` 重複填充至指定長度 `len`
  • 超過長度則截斷
SELECT LPAD('hi', 4, '??');   -- '??hi'
SELECT RPAD('hi', 5, '?');    -- 'hi???'

LEFT(str, len) / RIGHT(str, len)

  • 取最左/右 `len` 個字元
  • 多位元組安全
SELECT LEFT('foobarbar', 5);   -- 'fooba'
SELECT RIGHT('foobarbar', 4);  -- 'rbar'

多位元組字元支援說明

標註「多位元組安全」的函數(LOCATE/INSTR/LEFT/RIGHT 等)正確處理 UTF8/GBK 等多位元組編碼,**不會**將單一字元拆分。長度計算請依業務選擇 `LENGTH`(位元組)或 `CHAR_LENGTH`(字元數)。

效能提示

  • 結果長度超過 `max_allowed_packet` 回傳 NULL
  • 大量資料處理優先考慮 `LOCATE`/`INSTR` 而非正則表達式
  • 固定長度填充 `LPAD`/`RPAD` 可用於報表對齊、代碼補零

下篇將涵蓋 SUBSTRING、REPLACE、TRIM、大小寫轉換、比較、格式化等進階字串函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved