DECLARE @urls TABLE (URL varchar(2000))
INSERT @urls VALUES ('\\myserver\mydir1\dir2\test.txt')
INSERT @urls VALUES ('\\myserver2\dir1\dir2\dir3\test.txt')
SELECT
REVERSE(SUBSTRING(REVERSE(URL), CHARINDEX('\', REVERSE(URL))+1, 8000))
FROM
@urls
Логика:
\\myserver\mydir1\dir2\test.txt
- REVERSE =
txt.tset\2rid\1ridym\revresym\
- искать первый
\
- дубльвсе после этого SUBSTRING =
2rid\1ridym\revresym\
- REVERSE =
\\myserver\mydir1\dir2
Вам не нужно знать LEN строки для SUBSTRING, поэтому просто используйте 8000
Редактировать, после комментария об использовании 8000
- Вы можете использовать 2147483647 в SUBSTRING, потому что он поддерживает максимальные типы
- Только должен быть равен или больше, чем переменная или столбец varcharдлина
- Как насчет затрат на вычисление LEN?
- Практически все URL должны вписываться в 2083 байта
- Это имеет значение?«Преждевременная оптимизация» и т. Д.