Quite often on technical forums a request to extract part of a text string is tackled in splendid isolation. I’ve used the technique below with postcodes before, but this time wanted to split the text in an SSRS log file to isolate report names from paths.
For example the string …
… means the report called “Summary” is contained in the “Outgoing” folder within the “Monthly” folder inside the “Finance” folder in the root.
The tricky bit being that the nesting levels vary. There are reports in root. And there are reports buried ten layers deep like russian dolls.
Task one, getting the report names is relatively easy. You could use the REVERSE function to help grab the text up to the “first” slash using CHARINDEX.
Task two, getting the path, is where forums go deep, with strings of functions to extract all the text to the left of the last slash (where there are an unknown number of slashes).
Where as, it is often far simpler to use REPLACE to remove the already found report name from the whole string, leaving just the path.
SELECT Report, REPLACE(ItemPath,Report,'') [Path], ... FROM ( SELECT RIGHT(ItemPath, CHARINDEX ('/', REVERSE(ItemPath))-1) Report, ...