Groups | Blog | Home
all groups > sql server (alternate) > november 2005 >

sql server (alternate) : Splitting a filename out of a filepath


starritt NO[at]SPAM gmail.com
11/18/2005 10:30:55 AM

I have to create a view where the filename is seperated from the path
to the file. Examples of the data include:

m:\images\big\myimg.jpg
m:\images\medium\myimg.jpg
z:\media\images\highqual\myimg.jpg

Is there a function that will return the position in a string of the
last \ ? With this I can easily use substring or similar to pull and
push this stuff into the fields I want. If this function does not
exist how do I move forward?
ZeldorBlat
11/18/2005 11:22:26 AM
I don't think they have a CHARINDEX that searches from the end of the
string. If you want to know the last position of a character within a
string, you can abuse the reverse() function like this:

len(filepath) - charindex('/', reverse(filepath)) + 1

That gives you the position of the last '/' in the string. Note that
this only works if you're searching for a single character (that is, it
won't work if you replace the '/' with some arbitrary string with
length > 1). Also, if there is no '/' in the string, this guy will
return len(filename) + 1 as opposed to the normal charindex() which
returns 0 if the needle isn't found.
starritt NO[at]SPAM gmail.com
11/18/2005 1:49:14 PM
Thank you sir -- that should work nicely.

J
Terry Kreft
11/21/2005 12:00:00 AM
Wll, I didn't think of using reverse in the frst place so your still ahead
of me on this one <g>.

--
Terry Kreft



[quoted text, click to view]

ZeldorBlat
11/21/2005 7:29:00 AM
[quoted text, click to view]

Good point...I hadn't thought of that.
Terry Kreft
11/21/2005 12:28:29 PM
If you apply reverse to the first parameter in the charindex you could
search for multiple chars as well.

e.g.

declare
@search varchar(255),
@find varchar(255)

SELECT
@search = 'm:\images\big\myimg.jpg',
@find = '\'

SELECT
len(@search) - charindex(reverse(@find), reverse(@search)) + 1 ,
LEFT(@search, len(@search) - charindex(reverse(@find), reverse(@search)) +
1)

Returns
----------- -------------
14 m:\images\big\

declare
@search varchar(255),
@find varchar(255)

SELECT
@search = 'm:\images\big\myimg.jpg',
@find = 'images\'

SELECT
len(@search) - charindex(reverse(@find), reverse(@search)) + 1 ,
LEFT(@search, len(@search) - charindex(reverse(@find), reverse(@search)) +
1)

Returns

----------- --------
10 m:\images\


--
Terry Kreft



[quoted text, click to view]

AddThis Social Bookmark Button