2010-05-27 10 views
7

mi sono bloccato con la sottostringa.Sottostringa SQL e ultimo indice di

In ingresso, ho una stringa che assomiglia a Sometext (123456). Quelle cifre alla fine sono casuali. Ho bisogno di ottenere solo il testo da quella stringa.

+0

altri esempi. Quindi vuoi "Sometext()" out o "Sometext"? Cosa succede se si dispone di "Sometext (123ABC456          )"? – gbn

+0

Ho solo cifre all'interno delle parentesi graffe –

risposta

9

Che ne dici di questo?

DECLARE @Data TABLE (Val VARCHAR(20)) 
INSERT @Data VALUES ('Sometext (123456)') 
INSERT @Data VALUES ('') 
INSERT @Data VALUES (NULL) 
INSERT @Data VALUES ('S(123456)') 
INSERT @Data VALUES ('(123456)') 

SELECT 
    CASE 
     WHEN CHARINDEX('(', Val) > 0 THEN 
      RTRIM(SUBSTRING(val,1, CHARINDEX('(', Val) - 1)) 
     ELSE Val 
    END 
FROM @Data 
1

Se si desidera solo la prima parte fino alla '(' si potrebbe provare

declare @t varchar(50) 
set @t = 'function (12343)' 

select rtrim(substring(@t,1, charindex('(', @t)-1)) 
3

E 'davvero dipende dal formato della stringa di input, ma qui è un approccio leggermente diverso utilizzando PATINDEX che restituirà la stringa fino a che non corrisponde a un carattere non AZ:.

declare @text varchar(500); set @text = 'Sometext (123456)' 
select SUBSTRING(@text, 0, PATINDEX('%[^A-Z]%' , @text)) 
4

Se vogliamo rimuovere la sentenza e mantenere il numero che potremmo fare così

0.123.
DECLARE @Text VARCHAR(MAX); 
SET @Text = 'Sometext (123456)' 

SELECT SUBSTRING(@Text, CHARINDEX(' ', @Text) + 1, LEN(@Text)) As TextOutput 

Il risultato sarà: (123456)