Consulta para obter apenas números de uma string

Suponha que eu tenha dados como este:

string 1: 003Preliminary Examination Plan string 2: Coordination005 string 3: Balance1000sheet 

A saída que espero é

 string 1: 003 string 2: 005 string 3: 1000 

E eu quero implementá-lo no sql. Por favor ajude. Desde já, obrigado 🙂

Primeiro crie este UDF

 CREATE FUNCTION dbo.udf_GetNumeric (@strAlphaNumeric VARCHAR(256)) RETURNS VARCHAR(256) AS BEGIN DECLARE @intAlpha INT SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric) BEGIN WHILE @intAlpha > 0 BEGIN SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' ) SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric ) END END RETURN ISNULL(@strAlphaNumeric,0) END GO 

Agora use a function como

 SELECT dbo.udf_GetNumeric(column_name) from table_name 

SQL FIDDLE

Espero que isso tenha resolvido seu problema.

Referência

Tente este –

Inquerir:

 DECLARE @temp TABLE ( string NVARCHAR(50) ) INSERT INTO @temp (string) VALUES ('003Preliminary Examination Plan'), ('Coordination005'), ('Balance1000sheet') SELECT LEFT(subsrt, PATINDEX('%[^0-9]%', subsrt + 't') - 1) FROM ( SELECT subsrt = SUBSTRING(string, pos, LEN(string)) FROM ( SELECT string, pos = PATINDEX('%[0-9]%', string) FROM @temp ) d ) t 

Saída:

 ---------- 003 005 1000 

Inquerir:

 DECLARE @temp TABLE ( string NVARCHAR(50) ) INSERT INTO @temp (string) VALUES ('003Preliminary Examination Plan'), ('Coordination005'), ('Balance1000sheet') SELECT SUBSTRING(string, PATINDEX('%[0-9]%', string), PATINDEX('%[0-9][^0-9]%', string + 't') - PATINDEX('%[0-9]%', string) + 1) AS Number FROM @temp 

Tente por favor:

 declare @var nvarchar(max)='Balance1000sheet' SELECT LEFT(Val,PATINDEX('%[^0-9]%', Val+'a')-1) from( SELECT SUBSTRING(@var, PATINDEX('%[0-9]%', @var), LEN(@var)) Val )x 

Com as consultas anteriores, recebo estes resultados:

‘AAAA1234BBBB3333’ >>>> Saída: 1234

‘-çã + 0! \ aº1234’ >>>> Saída: 0

O código abaixo retorna todos os caracteres numéricos:

1ª saída: 12343333

2ª saída: 01234

 declare @StringAlphaNum varchar(255) declare @Character varchar declare @SizeStringAlfaNumerica int declare @CountCharacter int set @StringAlphaNum = 'AAAA1234BBBB3333' set @SizeStringAlfaNumerica = len(@StringAlphaNum) set @CountCharacter = 1 while isnumeric(@StringAlphaNum) = 0 begin while @CountCharacter < @SizeStringAlfaNumerica begin if substring(@StringAlphaNum,@CountCharacter,1) not like '[0-9]%' begin set @Character = substring(@StringAlphaNum,@CountCharacter,1) set @StringAlphaNum = replace(@StringAlphaNum, @Character, '') end set @CountCharacter = @CountCharacter + 1 end set @CountCharacter = 0 end select @StringAlphaNum 
 declare @puvodni nvarchar(20) set @puvodni = N'abc1d8e8ttr987avc' WHILE PATINDEX('%[^0-9]%', @puvodni) > 0 SET @puvodni = REPLACE(@puvodni, SUBSTRING(@puvodni, PATINDEX('%[^0-9]%', @puvodni), 1), '' ) SELECT @puvodni 

Em consultas você pode replace qualquer caractere, que não é um número, com nada:

 REPLACE( ISNULL( column_name, '' ), '[^0-9]', '' )