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

SQL 遍歷字符串技巧:利用笛卡爾積與遞增序列表實現字符拆分

     編輯:MySQL 綜合教學

SQL 實現字符串逐字符遍歷/拆分的通用技巧

標準 SQL 無內建字符串分裂函數,但可通過輔助序列表 + 笛卡爾積 + SUBSTRING 巧妙實現單字符拆分,適用於 MySQL、Oracle、SQL Server 等多數關係型數據庫。

核心思路三步走

  1. 構建序列表 Temp: 僅含一列 id (1,2,3...n),行數 ≥ 目標字符串最大長度。
  2. 笛卡爾積關聯: 目標表 Src 與 Temp 交叉連接,產生每字符對應的位置行。
  3. 過濾與提取: 保留 Temp.id <= LENGTH(Src.str) 的行,用 SUBSTRING(str, pos, 1) 取單字符。

表結構示例

Temp 表          Src 表
id               id  name  other
1                1   Paul  KKK
2
3
...
8

標準 SQL 實現

SELECT SUBSTRING(s.name, iter.pos, 1) AS ch
FROM (SELECT name FROM Src WHERE name = 'Paul') s
CROSS JOIN (SELECT id AS pos FROM Temp) iter
WHERE iter.pos <= LENGTH(s.name);

輸出結果

ch
P
a
u
l

進階應用與變體

  • 指定分隔符拆分: 結合 SUBSTRING_INDEX (MySQL) 或 REGEXP_SUBSTR (Oracle 11g+/PG) 可按逗號、分號等拆分字段值。
  • 遞歸 CTE (WITH RECURSIVE): 現代數據庫 (MySQL 8.0+, PG, SQL Server) 可用遞歸 CTE 動態生成序列,無需物理 Temp 表。
  • 性能提示: Temp 表建議建立索引;大字符串或高併發場景下,優先考慮應用層拆分或數據庫內建函數 (如 MySQL 8.0 JSON_TABLE、PG regexp_split_to_table)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved