I have this filename AAAA_BBBBB_CC_HDDD_HGGG.csv
and I’m trying to keep the values after the second underscore starting from the right.
So i want to keep any values just before _HDDD_HGGG.csv
This is my code:
x
SET @NFileN = REVERSE(SUBSTRING(REVERSE(@source_filename),1,CHARINDEX('_',REVERSE(@source_filename), CHARINDEX('_', REVERSE (@source_filename), 0) + 1)))
And this is the returned value:
(6 rows affected)
_HDDD_HGGG.csv
Instead of being AAAA_BBBBB_CC
.
Does anyone has a clue for this?
Advertisement
Answer
You are taking a SUBSTRING from 1 till your CHARINDEX while your string is reversed. Either reverse your string again or use LEN to find the length of your string like so:
REVERSE(
SUBSTRING(
REVERSE(@source_filename),
CHARINDEX('_',
REVERSE(@source_filename),
CHARINDEX('_',
REVERSE (@source_filename),
0)+1)+1,
LEN(@source_filename)
)
)
p.s.: Added a second +1 to remove the “_” between CC and HDDD
p.p.s: CHARINDEX is a SQL Server function which I assume is what you are actually using. The MySQL equivalent would be POSITION, the equivalent for LEN would be LENGTH