需從類似 'F:\photo\Winter Leaves.jpg' 的路徑字串,分段擷取「磁碟代號」、「資料夾」、「檔名」。利用 CHARINDEX 定位分隔符,配合 LEFT、STUFF、REVERSE 即可完成,不需 CLR 或複雜邏輯。
DECLARE @A VARCHAR(100) = 'F:\photo\Winter Leaves.jpg';
| 目標段落 | T-SQL 運算式 | 結果 |
|---|---|---|
| 第一段 (磁碟代號) | LEFT(@A, CHARINDEX('\', @A) - 1) | F: |
| 中間段 (資料夾) | LEFT(STUFF(@A, 1, CHARINDEX('\', @A), ''), CHARINDEX('\', STUFF(@A, 1, CHARINDEX('\', @A), '')) - 1) | photo |
| 最後段 (檔名) | REVERSE(LEFT(REVERSE(@A), CHARINDEX('\', REVERSE(@A)) - 1)) | Winter Leaves.jpg |
| 移除第一字元 | STUFF(@A, 1, 1, '') | \photo\Winter Leaves.jpg |
CHARINDEX('find', str):回傳子字串首次出現位置 (1-based)。LEFT(str, len):取左側指定長度。STUFF(str, start, len, replace):刪除指定區間並插入新字串。REVERSE(str):字串反轉,利於從右側定位。SELECT value FROM STRING_SPLIT('F:\photo\Winter Leaves.jpg', '\');
/* 結果
value
F:
photo
Winter Leaves.jpg */
舊版本可自寫表值函數搭配 CROSS APPLY 達成相同效果。
TEXT / NTEXT (已淘汰),需為 VARCHAR/NVARCHAR。