2013-03-29 15 views
43

dizesinde son dizgeli karakter elde etmenin en iyi yolu nedir? C# 'de, belirli bir karakter dizisi için verilen bir dizinin son dizinini almak için String.LastIndexOf yöntemine sahibiz. SQL Server'da benzer bir işlev var mı. CHARINDEX kullanmayı denedim ama başaramadı.SQL 2008

Biraz zor
+12

Hey, "çoğaltılamaz" sorusu SQL Server 2008 içindir ve diğeri aralarında bir fark vardır SQL Server 2000 içindir. –

+1

Yani diğer soruya bir cevap ekleyin. – JasonMArcher

cevap

74

, ancak böyle bir şey yapabileceğini:

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

http://stackoverflow.com/questions/1024978/find-index-of-last-occurrence-of-a-sub-string-using-t-sql adresinden saklandım, çünkü oldukça sık görünüyor gibi görünüyor . – antinescience

+2

Burada cevap daha kısa ve etkili: http://stackoverflow.com/a/13610627/197591 – Neo

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

, bu bir deneyin adım sonuç adım analiz edin.


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