对于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