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

SQL SUBSTRING 函數詳解:從左/右截取、參數含義、與 Java substring 差異對照

     編輯:關於SqlServer

標準 SQL SUBSTRING (同義 SUBSTR) 用於字串截取,支援正負起始位置、長度參數,與 Java substring 行為不同,易踩坑。

語法

SUBSTRING(str, start, length)
SUBSTR(str, start, length)
  • str:目標字串。
  • start:起始位置 1-based。
    — 正數:從左向右數 (1 為第一字元)。
    — 負數:從右向左數 (-1 為最後一字元)。
    — 0:視同 1。
  • length:可選,截取長度。省略則截至字串結尾。

範例對照表

與 Java substring 關鍵差異

SQL結果說明
SUBSTRING('abcdefg', 3, 4)cdef從第 3 字元取 4 碼
SUBSTRING('abcdefg', -3, 4)efg從倒數第 3 字元取 4 碼 (實際僅剩 3 碼)
SUBSTRING('abcdefg', 0, 3)abc0 視同 1
SUBSTRING('abcdefg', 1, 3)abc標準用法

常見陷阱

  1. 把 Java 0-based 思維套用 SQL,導致截取偏移一位。
  2. SQL length 參數可省略,Java endIndex 省略則截至結尾,語義相近但索引不同。
  3. Oracle SUBSTR 行為與標準 SQL 一致;SQL Server SUBSTRING 不支援負數 start (需用 RIGHT/LEFT)。

實戰建議

  • 統一團隊規約:SQL 層面截取優先用 SUBSTRING(str, pos, len),正數 pos 從左,負數從右。
  • 複雜截取邏輯下推應用層 (Java/Python/Go) 處理,SQL 僅做簡單切分。
  • 單元測試覆蓋邊界:空字串、長度不足、負數起始、零起始。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度SQL SUBSTRINGJava String.substring
索引基準1-based0-based
參數語義start, lengthbeginIndex, endIndex (不含 endIndex)
負數支援支援 (從右數)不支援 (拋 StringIndexOutOfBoundsException)
範例SUBSTRING('abc', -1, 1) → 'c'"abc".substring(1, 3) → "bc"