2016-08-16 3 views
1

abrufen Ich möchte Zeichenfolge in Klammern (SQL Server) abrufen.Zeichenfolge in Klammern

Mein Code:

declare @Text VARCHAR(100) = '12345 (abcxyz (qwerty),)' 
--declare @Text VARCHAR(100) = '12345 (abcxyz,)' 

select case when SUBSTRING(@Text, charindex(')', @Text) - 2, 2) = ', ' 
    then SUBSTRING(@Text, charindex('(', @Text) + 1, len(@Text) - charindex('(', @Text) - 3) 
    else SUBSTRING(@Text, charindex('(', @Text) + 1, len(@Text) - charindex('(', @Text) - 1) end 

Ergebnis

abcxyz (qwerty), 
abcxyz 

Mein erwartetes Ergebnis:

abcxyz (qwerty) -- without comma 
abcxyz 

Bitte um Hilfe! Danke vielmals!

+0

Welche Ausgabe würden Sie für '123 (abc erwarten, def),) '? Wenn '123 (abcdef)' warum nicht einen 'REPLACE' um deinen gegenwärtigen case-Ausdruck wickeln? –

+0

Ändern Sie die -1 in -3 – GuidoG

+0

Ist diese Frage gelöst? Brauchen Sie weitere Hilfe? Bitte erlauben Sie mir einen Hinweis: Es wäre sehr nett von Ihnen, die Annahmeprüfung unter dem Stimmzähler der besten Antwort anzukreuzen. Dies wird 1) dieses Problem als gelöst markieren 2) es den Anhängern erleichtern, die beste Lösung zu finden 3) Punkte an den Beantworter zu zahlen und 4) Punkte an Sie zu zahlen. Sobald Sie die Grenze von 15 Punkten überschritten haben, werden Sie zusätzlich aufgefordert, über Beiträge zu stimmen. Dies ist der SO-Weg, um Danke zu sagen. Glückliche Kodierung! – Shnugo

Antwort

1

Sie können einfach ersetzen Funktion in Ihrem Code anwenden.

DECLARE @Text VARCHAR(100) = '12345 (abcxyz (qwerty),)' 

    SELECT Replace(CASE 
       WHEN SUBSTRING(@Text, charindex(')', @Text) - 2, 2) = ', ' 
        THEN SUBSTRING(@Text, charindex('(', @Text) + 1, len(@Text) - charindex('(', @Text) - 3) 
       ELSE SUBSTRING(@Text, charindex('(', @Text) + 1, len(@Text) - charindex('(', @Text) - 1) 
      END, ',', '') 
0

Sie könnten versuchen, diese

DECLARE @tbl TABLE(Txt VARCHAR(100)); 
INSERT INTO @tbl VALUES 
('12345 (abcxyz (qwerty),)') 
,('12345 (abcxyz,)'); 

SELECT tbl.Txt 
     ,positions.* 
     ,SUBSTRING(tbl.Txt,FirstOpen+1,LastClose-FirstOpen-2) 
FROM @tbl AS tbl 
CROSS APPLY(SELECT CHARINDEX('(',Txt) AS FirstOpen 
        ,LEN(Txt)-CHARINDEX(')',REVERSE(Txt)) AS LastClose 
      ) AS positions 
0

andere Art und Weise mit PARSENAME:

declare @Text VARCHAR(100) = '12345 (abcxyz (qwerty),)' 

SELECT STUFF(part1,1,1,''), 
     STUFF(LEFT(part2,LEN(part2)-1),1,1,'') 
FROM (
    SELECT PARSENAME(REPLACE(@Text,' ','.'),3) as part1, 
      PARSENAME(REPLACE(@Text,' ','.'),3)+' '+PARSENAME(REPLACE(@Text,' ','.'),2) as part2 
    ) as p 

Ausgang:

abcxyz abcxyz (qwerty) 
Verwandte Themen