2013-03-29 11 views
43

W języku C# mamy metodę String.LastIndexOf, aby uzyskać ostatni indeks położenia określonej litery dla danego ciągu znaków. Czy istnieje podobna funkcja do tego samego w SQL Server. Próbowałem użyć CHARINDEX, ale nie mogłem go osiągnąć.Jaki jest najlepszy sposób uzyskania ostatniego znaku indeksowego w SQL 2008

+12

Hej, to "powielone" pytanie dotyczy SQL Server 2008, a drugie dotyczy SQL Server 2000. Istnieje między nimi różnica. –

+1

Dodaj więc odpowiedź na inne pytanie. – JasonMArcher

Odpowiedz

74

trochę skomplikowane, ale można zrobić coś takiego:

REVERSE(SUBSTRING(REVERSE([field]),0,CHARINDEX('[char]',REVERSE([field])))) 
+0

Miałem to ukryte z http://stackoverflow.com/questions/1024978/find-index-of-last-occurrence-of-a-sub-string-using-t-sql, ponieważ wydaje się dość często . – antinescience

+2

Odpowiedź tutaj jest bardziej zwięzła i skuteczna: http://stackoverflow.com/a/13610627/197591 – Neo

28
DECLARE @x VARCHAR(32) = 'xyzxyzyyythgetdghydgsh'; 
SELECT LEN(@x) - CHARINDEX('y', REVERSE(@x)) + 1; 
0

Spróbuj to jedno, wynik analizy krok po kroku.


declare @string varchar(max) 
declare @subString varchar(max) 
set @string = 'this is a duplicated question,  but may get some new answers, since tech chagne from time to time as we know'; 
set @subString = 'this is a duplicated question,  but may get some new answers, since tech chagne from time to time' 
--Find the string.lastIndexof(time) 
select LEN(@String) 
select LEN(@SubString) 
select CHARINDEX('time', REVERSE(@string)) 
select reverse(@string) 
select reverse('time') 
SELECT LEN(@string) - CHARINDEX(reverse('time'), REVERSE(@string)) - Len('time') + 1 
Powiązane problemy