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?
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í
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)