I'd like to select everything AFTER a certain character (-) that is placed on the most right side.
Eg.
abcd-efgh-XXXX
And I'd like to select the XXXX part
Thanks!
I'd like to select everything AFTER a certain character (-) that is placed on the most right side.
Eg.
abcd-efgh-XXXX
And I'd like to select the XXXX part
Thanks!
You can use:
select right(col, charindex('-', reverse(col)) - 1)
 
    
    DECLARE @x varchar(100)
SET @x = 'abcd-efgh-XXXX'
SELECT RIGHT(@x, CHARINDEX('-', REVERSE(@x)) - 1)
 
    
    Using string split available from SQLServer 2016
;with cte
as
(
 select 
*,row_number() over (order by (select null)) as rownum
 from string_split('abcd-efgh-XXXX','-')
)
select top 1 * from cte 
order by rownum desc
 
    
    @thegameiswar had a clever solution, since I needed the results from a comma delimited list. I don't have SQL 2016, so I made it work with a user defined split function.
;with cte
as
(
 select 
 *,row_number() over (order by (select null)) as rownum
 from database..[fn_SplitDelimitedList](@CommaDelimitedList,',')
)
select * from cte 
order by rownum desc
 
    
    select substr('Prueba,Prueba2',instr('Prueba,Prueba2',',') + 1) from dual
 
    
     
    
    SQL Server Management Studio v15.0.18206.0 (18.4):
RIGHT([col], CHARINDEX('-', REVERSE([col]), -1))
This is how to do the opposite of this question. i.e everything before the certain character that's placed on the right most side. If anyone found this question looking for the opposite like I did...
DECLARE @x varchar(100)
SET @x = 'abcd-efgh-XXXX'
SELECT LEFT(@x,LEN(@x) - CHARINDEX('-', REVERSE(@x)))
Then you would get abcd-efgh
 
    
    Worked for me in the case you are using postgres:
SELECT RIGHT(col, POSITION('-' IN REVERSE(col))-1)
Swap out POSITION for CHARINDEX
