SUBSTRING ( expression, start, length )
參數
expression
字符串、二進制字符串、文本、圖像、列或包含列的表達式。請勿使用包含聚合函數的表達式。
start
整數或可以隱式轉換為 int 的表達式,指定子字符串的開始位置,索引是從1開始。
length
整數或可以隱式轉換為 int 的表達式,指定子字符串的長度。經測試,暫且發現只能是非負數。
返回值
1.如果 expression 是一種支持的二進制數據類型,則返回二進制數據,這種情況我們暫且不討論。
2.如果 expression 是一種支持的字符數據類型,則返回字符數據。
(1)如果 start的索引是從1開始,則從表達式的第一個字符開始進行字符串截取,從2開始就從表達式的第二個字符開始截取,以此類推。
例如:
select SUBSTRING('abcde',1,2) 返回結果 ab
select SUBSTRING('abcde',2,3) 返回結果 bcd
select SUBSTRING('abcde',1,0) 返回結果為空
select SUBSTRING('abcde',0,8) 返回結果為abcde,注意后面沒有空格了。
(2) 如果start的索引是從小於1(0或負數)開始,則返回長度等於從1開始,截取長度為 length - ((start - 1)的絕對值), 如果這個差為負數就返回空。
畫個圖理解這種情況(比如SUBSTRING('abcde',0,2)返回a):
坐標:0 1 2 3 4 5
內容:空 a b c d e
截取:從此截取 截取到這里結束
例如:下面的 || 表示絕對值計算
select SUBSTRING('abcde',0,2) 返回結果為 a , 計算公式為SUBSTRING(1,2-|2-1|)
select SUBSTRING('abcde',0,-1) 返回錯誤提示“傳遞到 substring 函數的長度參數無效”
select SUBSTRING('abcde',-1,2) 返回結果為空, 計算公式為SUBSTRING(1,2-|-1-1|)
select SUBSTRING('abcde',-5,3) 返回結果為空, 計算公式為SUBSTRING(1,3-|-5-1|)
select SUBSTRING('abcde',-1,4) 返回結果為ab, 計算公式為SUBSTRING(1,4-|-1-1|)
select SUBSTRING('abcde',-2,8) 返回結果為abcde, 計算公式為SUBSTRING(1,8-|-2-1|)