2016-03-21 19 views
3

ben karakterleri kırpmak isteyenTrim dize

WebApp 

Smart - App 

WebApp - 10148 

Smart - App - 1458 

Beklenen Sonuç gibi dizeleri var.

aşağıda sorgu denedim ve sonuç bu

select LEFT(app+' - ', CHARINDEX(' - ',app+' - ')-1) from repository 

WebApp 
Smart 

herkes bu sıralamak için bana yardımcı olabilir mi?

+0

'app' içeren ürünlerin sütunun adıdır için Metin? –

cevap

2

bu deneyin:

reverse(right(reverse(@string), len(@string) - charindex('-',reverse(@string),1))); 
+0

harika görünüyor! sonundaki tireyi değiştirebilir miyim? – Michael

+0

@Michael: - Güncelleme, şimdi sonunda tire almazsınız. Lütfen şimdi kontrol edin! –

1

Sadece rekursive CTE ile eğlenceli bir yaklaşımla (Ben Rahul cevabı :-) kullanmayı tercih ediyorum)

DECLARE @tbl TABLE(x VARCHAR(100)); 
INSERT INTO @tbl VALUES('WebApp - 10148'),('Smart - App - 1458'); 

WITH FindHyphens AS 
(
    SELECT x,0 AS StartInx, PATINDEX('% - %',x) AS PosHyphen,SUBSTRING(x,PATINDEX('% - %',x)+1,1000) AS Subst FROM @tbl 
    UNION ALL 
    SELECT x,StartInx+PATINDEX('% - %',Subst),PATINDEX('% - %',Subst),SUBSTRING(Subst,PATINDEX('% - %',Subst)+1,1000) 
    FROM FindHyphens 
    WHERE PATINDEX('% - %',Subst)>0 
) 
,FindLastHyphen AS 
(
    SELECT x, MAX(StartInx+PosHyphen)-1 AS LastPos 
    FROM FindHyphens 
    GROUP BY x 
) 
SELECT SUBSTRING(x,1,LastPos) 
FROM FindLastHyphen