una right length extraer ejemplos charindex caracteres caracter cadena buscar sql sql-server sql-server-2008 tsql

right - varchar max length sql server



SQL toma solo los valores numéricos de un varchar (7)

Digamos que tengo algunos campos como los siguientes:

abd738927 jaksm234234 hfk342 ndma0834 jon99322

Tipo: varchar.

¿Cómo tomo solo los valores numéricos de esto para visualizar:

738927 234234 342 0834 99322

Han intentado subserver sin embargo, los datos varían en longitud, y el elenco tampoco funcionó debido a la imposibilidad de convertir, ¿alguna idea?


tabla de entrada

si tiene datos como los de arriba en la imagen, utilice la consulta siguiente

select field_3 from table where PATINDEX(''%[ ~`!@#$%^&*_()=+/|{};",<>/?a-z]%'', field_3)=0

Los resultados se verán así

Tabla de resultados


Aquí está el ejemplo con PATINDEX:

select SUBSTRING(fieldName, PATINDEX(''%[0-9]%'', fieldName), LEN(fieldName))

Esto supone (1) que el campo TENDRÁ un valor numérico, (2) los números están todos agrupados, y (3) los números no tienen caracteres posteriores después de ellos.


Creo que quieres la función Val() VBA. Lo suficientemente fácil de lograr con IsNumeric()

create function Val ( @text nvarchar(40) ) returns float as begin -- emulate vba''s val() function declare @result float declare @tmp varchar(40) set @tmp = @text while isnumeric(@tmp) = 0 and len(@tmp)>0 begin set @tmp=left(@tmp,len(@tmp)-1) end set @result = cast(@tmp as float) return @result end


Extraiga solo números (sin usar while loop) y verifique cada carácter para ver si es un número y extraerlo

Declare @s varchar(100),@result varchar(100) set @s=''as4khd0939sdf78'' set @result='''' select @result=@result+ case when number like ''[0-9]'' then number else '''' end from ( select substring(@s,number,1) as number from ( select number from master..spt_values where type=''p'' and number between 1 and len(@s) ) as t ) as t select @result as only_numbers


DECLARE @NonNumeric varchar(1000) = ''RGI000Testing1000'' DECLARE @Index int SET @Index = 0 while 1=1 begin set @Index = patindex(''%[^0-9]%'',@NonNumeric) if @Index <> 0 begin SET @NonNumeric = replace(@NonNumeric,substring(@NonNumeric,@Index, 1), '''') end else break; end select @NonNumeric -- 0001000


select substring( ''jaksm234234'', patindex(''%[0-9]%'',''jaksm234234''), LEN(''jaksm234234'')-patindex(''%[0-9]%'',''jaksm234234'')+2 )


Bueno, si no quieres crear una función, puedes hacer algo como esto:

cast(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace( replace(replace(replace(replace(replace(replace(replace(replace(replace(replace( replace(replace(replace(replace(replace(replace(replace(replace(replace(YOUR_COLUMN ,''A'',''''),''B'',''''),''C'',''''),''D'',''''),''E'',''''),''F'',''''),''G'',''''),''H'',''''),''I'',''''),''J'','''') ,''K'',''''),''L'',''''),''M'',''''),''N'',''''),''O'',''''),''P'',''''),''Q'',''''),''R'',''''),''S'',''''),''T'','''') ,''U'',''''),''V'',''''),''W'',''''),''X'',''''),''Y'',''''),''Z'',''''),''$'',''''),'','',''''),'' '','''') as float)