路徑字串 'F:\photo\Winter Leaves.jpg' 需分段擷取:磁碟、資料夾、檔名。使用 LEFT、CHARINDEX、STUFF、REVERSE 組合完成,**欄位不能為 TEXT 類型** (大物件類型不支援這些函數)。
DECLARE @A VARCHAR(200) = 'F:\photo\Winter Leaves.jpg';
SELECT LEFT(@A, CHARINDEX('\', @A) - 1); -- 結果: F:
-- 先移除第一段含分隔符,再取下一個分隔符前的內容
SELECT LEFT(
STUFF(@A, 1, CHARINDEX('\', @A), ''),
CHARINDEX('\', STUFF(@A, 1, CHARINDEX('\', @A), '')) - 1
); -- 結果: photo
-- 反轉字串,取第一個分隔符前的內容,再反轉回來
SELECT REVERSE(
LEFT(
REVERSE(@A),
CHARINDEX('\', REVERSE(@A)) - 1
)
); -- 結果: Winter Leaves.jpg
SELECT STUFF(@A, 1, 1, ''); -- 結果: :\photo\Winter Leaves.jpg
| 函數 | 語法 | 用途 |
|---|---|---|
| LEFT | LEFT(str, len) | 取左側 len 字元 |
| CHARINDEX | CHARINDEX(sub, str [, start]) | 尋找子字串位置 (1-based) |
| STUFF | STUFF(str, start, len, replacement) | 刪除 start 起 len 字元並插入 replacement |
| REVERSE | REVERSE(str) | 字串反轉 |
-- 2016+ 簡單分割 (無順序保證)
SELECT value FROM STRING_SPLIT('F:\photo\Winter Leaves.jpg', '\');
-- 2022+ 保留順序與位置
SELECT value, ordinal FROM STRING_SPLIT('F:\photo\Winter Leaves.jpg', '\') ORDER BY ordinal;