2010-05-27 15 views
7

me he quedado atascado con la subcadena.subcadena de SQL y último índice de

En la entrada tengo una cadena que se parece a Sometext (123456). Esos dígitos al final son aleatorios. Necesito obtener solo texto de esa cadena.

+0

Más ejemplos. Entonces, ¿quieres "Sometext()" out o "Sometext"? ¿Qué sucede si tiene "Sometext (123ABC456          )"? – gbn

+0

Tengo solo dígitos dentro de las llaves –

Respuesta

9

¿Qué tal esto?

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

Si lo que desea es la primera parte hasta el '(' podría intentar

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

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

Realmente depende del formato de la cadena de entrada, pero aquí es un enfoque ligeramente diferente utilizando PATINDEX que devolverá la cadena hasta que coincida con un carácter no AZ:.

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

Si queremos eliminar la frase y mantener el número que podríamos hacer como esto

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

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

El resultado será: (123456)

Cuestiones relacionadas