Array
(
)

Extrair números de campo varchar em consulta SQL

Evertonac
   - 10 ago 2004

É possível extrair apenas números de um campo varchar numa consulta SQL? Por exemplo, para extrair apenas o ano de um campo data, usa-se extract(year from data).


Motta
   - 10 ago 2004

existem funcoes propietarias , tipo to_number do Oracle.

no sql ansi existe o CAST

select cast(numero) as integer
from tabela


creio que a sintaxe é assim


Evertonac
   - 10 ago 2004

Cast converte o campo de varchar para integer, neste caso. O que quero é extrair numa consulta SQL, na cláusula where, apenas números de um campo varchar que pode conter também outros caracteres.


Citação:
existem funcoes propietarias , tipo to_number do Oracle.

no sql ansi existe o CAST

select cast(numero) as integer
from tabela


creio que a sintaxe é assim



Motta
   - 10 ago 2004

conheço funcoes proprietarias do Oracle

substr - equivale ao copy do delphi
instr - eq. ao pos

no ansi , não sei


Possamai
   - 20 jan 2016

preciso disto tambem... alguem sabe?

Huidemar Costa
   - 20 jan 2016

Faça algo mais ou menos assim:

#Código

function SoNumero(texto : String): String; 
var   
  I : Byte; 
begin   
   Result := '';   
   for I := 1 To Length(texto) do      
       if texto [I] In ['0'..'9'] Then        
            Result := Result + texto [I]; 
end;

Riechelmann
   - 20 jan 2016

Função Sql SErver

#Código

ALTER FUNCTION [dbo].[SO_NUMERO] ( @PARAMETRO VARCHAR(255) ) RETURNS VARCHAR(255) AS
BEGIN

	DECLARE @TAM INT
	DECLARE @I   INT
	DECLARE @CARACTER VARCHAR(1)
	DECLARE @RESULTADO VARCHAR(60)

	SET @TAM = LEN(@PARAMETRO)
	SET @I   = 1

	SET @RESULTADO = ''
	WHILE @I <= @TAM
	BEGIN

	   SET @CARACTER = SUBSTRING(@PARAMETRO, @I, 1)
	
	   
	   IF (@CARACTER = '0') OR
		  (@CARACTER = '1') OR
		  (@CARACTER = '2') OR
		  (@CARACTER = '3') OR
		  (@CARACTER = '4') OR
		  (@CARACTER = '5') OR
		  (@CARACTER = '6') OR
		  (@CARACTER = '7') OR
		  (@CARACTER = '8') OR
		  (@CARACTER = '9') 

		   SET @RESULTADO = @RESULTADO + @CARACTER

	   SET @I = @I + 1
	END

    RETURN @RESULTADO

END