2012-05-04 57 views
11

Tengo la siguiente cadena.¿Cómo obtener la parte numérica de una cadena usando T-SQL?

Input 
-------------- 
2030031469-NAI 

Para obtener la parte numérica, estoy usando el siguiente script

declare @str varchar(50)= '2030031469-NAI' 

Select 
    @str 
    ,SUBSTRING(@str, 1, NULLIF(CHARINDEX('-', @str) - 1, -1)) 
     ,Left(@str,PATINDEX('%-%',@str)-1) 

para obtener el siguiente resultado

Output: 
---------- 
2030031469 

¿Hay alguna otra manera fácil/elegante de hacer lo mismo ?

Respuesta

24
select left(@str, patindex('%[^0-9]%', @str+'.') - 1) 
+1

adora esta respuesta! –

3

Por favor, consulte con esto, he usado en mi proyecto para la extracción de los números de teléfono

CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000)) 
    Returns VarChar(1000) 
    AS 
    Begin 

     While PatIndex('%[^0-9]%', @Temp) > 0 
      Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '') 

     Return @TEmp 
    End 
+0

me encontré en este blog http: //blogs.lessthandot .com/index.php/DataMgmt/DataDesign/sql-server-extracting-data-again Esto es realmente bueno, ¡ – Maddy

2

En caso de que su cadena de inicialización con el alfabeto y terminan con igual número ERT-123

se puede utilizar esta consulta:

(select substring(@str,patindex('%[0-9]%', @str),len(@str))) 
Cuestiones relacionadas