對於ColumnA,如果只想拿出前17個字符,你應該使用
RIGHT(Path, LEN(Path) - 17)
由於你目前的解決方案不會工作如果Path超過35個字符,則k正確。
至於向上返回字符串的第一個反斜槓,使用:
SELECT LEFT(Detail, CHARINDEX('\', Detail)) FirstFolder, Detail, Path
FROM
(
SELECT distinct RIGHT(Path, LEN(Path) - 17) AS Detail, Path
FROM [DB].[dbo].[Projects]
Where [Path] like '\DATA%'
AND [Deleted] = '0'
) a
或全部之一:
SELECT DISTINCT SUBSTRING(Path, 18, CHARINDEX('\', Path, 18) - 18)
FROM [DB].[dbo].[Projects]
WHERE [Path] like '\DATA%'
AND [Deleted] = '0'
這是說:
- 從
path
抽取子
- 起始於字符18
- 字符串的長度將通過查找
path
中的第一個反斜槓的位置來計算,該位置從字符18開始,減去18(因爲我們開始搜索第18個字符,並且我們希望它相對於我們搜索的開始不原始字符串的開始)
更新:
由於@etsa正確地指出,如果不能保證這條道路是至少18個字符長,包含字符18後反斜槓用於ev的ERY行,你應該使用下列只返回那些滿足這一條件的行:
SELECT DISTINCT SUBSTRING(Path, 18, CHARINDEX('\', Path, 18) - 18)
FROM [DB].[dbo].[Projects]
WHERE [Path] like '\DATA%'
AND [Deleted] = '0'
AND CHARINDEX('\', Path, 18) > 0
請提供樣本數據和請參閱[如何問一個良好的SQL問題(http://meta.stackoverflow.com/questions/271055/tips-for -asking-a-good-structured-query-language-sql-question/271056)和[如何創建一個MCVE](http://stackoverflow.com/help/mcve)。只是一個提示:'CHARINDEX'是你的朋友...... – Shnugo
charindex()會告訴你一個字符的第一個位置,並將它提供給left()或substring()。 –
字符串Path是否總是比17 char更長? – etsa