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

SQL Server SUBSTRING 函數深度解析:起始位置、長度與負數行為詳解

     編輯:關於SqlServer

語法定義

SUBSTRING(expression, start, length)
  • expression:字符串、二進制、列或表達式(不可含聚合函數)
  • start:1-based 起始位置,整數或隱式轉 int 的表達式
  • length:子串長度,整數或隱式轉 int 的表達式

關鍵行為:start ≤ 0 的處理邏輯

SQL Server 將字符串視為從位置 1 開始。當 start ≤ 0 時,實際起始位置按下式計算:

有效起始位置 = start + 1
實際可取長度 = length - (1 - start)  -- 扣除「虛擬」負偏移量

實測案例(假設 DWMC = 'ABCDEFG')

startlength結果說明
03'AB'有效起始 1,實際長度 3-(1-0)=2
13'ABC'標準用法
-13'A'有效起始 0→1,實際長度 3-(1-(-1))=1
-23''實際長度 3-(1-(-2))=0,返回空串
-93''實際長度為負,返回空串

最佳實踐建議

  1. 始終使用 正整數 start (≥1),避免負數/零導致難以預期的結果
  2. 需從右側截取時,改用 RIGHT() 或 SUBSTRING(..., LEN(...)-n+1, n)
  3. 配合 CHARINDEX/PATINDEX 動態計算起始位置

start=0 結果 start=1 結果 start=-1 結果 start=-2 結果 start=-9 結果

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