Ordenar tabla alfanumerica como numerica

16/11/2003 - 23:11 por Antonio | Informe spam
Es decir, tengo una tabla con valores alfanumericos:

1
11
111
2
a-1
3
33
b-1
4
y deseo que se ordenen de forma numerica:
1
2
3
4
11
33
111
a-1
b-1
He probado de todo y no se como hacerlo con las funciones convert me da
error pues valores alfanumericos no se pueden convertir a numericos.

Saludos,

Preguntas similare

Leer las respuestas

#1 Eladio Rincón
16/11/2003 - 23:29 | Informe spam
Hola Antonio,

prueba esto:

CREATE TABLE FOO2 ( valor char(10))
go

insert into foo2 values ( '1' )
insert into foo2 values ( '11' )
insert into foo2 values ( '10' )
insert into foo2 values ( '2' )
insert into foo2 values ( '1' )
insert into foo2 values ( 'a-1' )
insert into foo2 values ( 'b1' )

go

select *
from foo2
order by
case when isnumeric ( valor ) = 1
then cast ( valor as integer )
else 99999999
end
asc


Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Antonio" escribió en el mensaje news:u7v%
Es decir, tengo una tabla con valores alfanumericos:

1
11
111
2
a-1
3
33
b-1
4
y deseo que se ordenen de forma numerica:
1
2
3
4
11
33
111
a-1
b-1
He probado de todo y no se como hacerlo con las funciones convert me da
error pues valores alfanumericos no se pueden convertir a numericos.

Saludos,




Respuesta Responder a este mensaje
#2 Antonio
17/11/2003 - 00:12 | Informe spam
Eladio.. creo que vamos por buen camino,

Me ordenan en primera instancia todos los valores numericos.. pero me deja
sin ordenar los alfanumericos... me los muestra en el orden que fueron
introducidos... ej:

1
2
3
6
11
a-1
a-8
a-5
a-4
a3

Gracias por tu ayuda.



"Eladio Rincón" escribió en el mensaje
news:
Hola Antonio,

prueba esto:

CREATE TABLE FOO2 ( valor char(10))
go

insert into foo2 values ( '1' )
insert into foo2 values ( '11' )
insert into foo2 values ( '10' )
insert into foo2 values ( '2' )
insert into foo2 values ( '1' )
insert into foo2 values ( 'a-1' )
insert into foo2 values ( 'b1' )

go

select *
from foo2
order by
case when isnumeric ( valor ) = 1
then cast ( valor as integer )
else 99999999
end
asc


Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Antonio" escribió en el mensaje
news:u7v%
Es decir, tengo una tabla con valores alfanumericos:

1
11
111
2
a-1
3
33
b-1
4
y deseo que se ordenen de forma numerica:
1
2
3
4
11
33
111
a-1
b-1
He probado de todo y no se como hacerlo con las funciones convert me da
error pues valores alfanumericos no se pueden convertir a numericos.

Saludos,




Respuesta Responder a este mensaje
#3 dbuendiab
17/11/2003 - 14:39 | Informe spam
"Antonio" wrote in message news:<u7v#...
Es decir, tengo una tabla con valores alfanumericos:

1
11
111
2
a-1
3
33
b-1
4
y deseo que se ordenen de forma numerica:
1
2
3
4
11
33
111
a-1
b-1
He probado de todo y no se como hacerlo con las funciones convert me da
error pues valores alfanumericos no se pueden convertir a numericos.



A falta de conocer mejor el universo de valores que tiene tu tabla,
para los que muestras sirve una cosa así:

CREATE TABLE T ( valor char(10))
go

insert into T values ( '1' )
insert into T values ( '11' )
insert into T values ( '111' )
insert into T values ( '2' )
insert into T values ( 'a-1' )
insert into T values ( '3' )
insert into T values ( '33' )
insert into T values ( 'b-1' )
insert into T values ( '4' )
insert into T values ( 'a2' )
insert into T values ( 'b-3' )

go

SELECT
VALOR -- Supuesto que sea un CHAR(10) -
FROM T
ORDER BY
CASE WHEN ISNUMERIC(VALOR) = 1
THEN RIGHT( '0000000000' + VALOR, 10 )
ELSE RIGHT( 'AAAAAAAAAA' + REPLACE(VALOR,'-',''), 10 ) END


Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
#4 Antonio
17/11/2003 - 17:01 | Informe spam
Ok... es perfecto Una ultima pregunta... si es mas de un caracter
indefinido es decir.. ha escrito por ejemplo A-3 y/o A/7, el ejemplo
detecta '-', pero ¿podria detectar otros mas a parte de este?

Saludos, y perdonad tanta pregunta.
Muchas gracias

"Diego Buendia" escribió en el mensaje
news:
"Antonio" wrote in message


news:<u7v#...
> Es decir, tengo una tabla con valores alfanumericos:
>
> 1
> 11
> 111
> 2
> a-1
> 3
> 33
> b-1
> 4
> y deseo que se ordenen de forma numerica:
> 1
> 2
> 3
> 4
> 11
> 33
> 111
> a-1
> b-1
> He probado de todo y no se como hacerlo con las funciones convert me da
> error pues valores alfanumericos no se pueden convertir a numericos.

A falta de conocer mejor el universo de valores que tiene tu tabla,
para los que muestras sirve una cosa así:

CREATE TABLE T ( valor char(10))
go

insert into T values ( '1' )
insert into T values ( '11' )
insert into T values ( '111' )
insert into T values ( '2' )
insert into T values ( 'a-1' )
insert into T values ( '3' )
insert into T values ( '33' )
insert into T values ( 'b-1' )
insert into T values ( '4' )
insert into T values ( 'a2' )
insert into T values ( 'b-3' )

go

SELECT
VALOR -- Supuesto que sea un CHAR(10) -
FROM T
ORDER BY
CASE WHEN ISNUMERIC(VALOR) = 1
THEN RIGHT( '0000000000' + VALOR, 10 )
ELSE RIGHT( 'AAAAAAAAAA' + REPLACE(VALOR,'-',''), 10 ) END


Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
#5 dbuendiab
18/11/2003 - 16:35 | Informe spam
"Antonio" wrote in message news:...
Ok... es perfecto Una ultima pregunta... si es mas de un caracter
indefinido es decir.. ha escrito por ejemplo A-3 y/o A/7, el ejemplo
detecta '-', pero ¿podria detectar otros mas a parte de este?



Puedes anidar los REPLACES...

REPLACE( REPLACE( VALOR, '-', '' ), '/', '' ) etc

pero también le podrías limitar al usuario la entrada de datos para
que no te metiera basura (¿atándole las manos, quizás?) :)

Saludos,

Diego Buendia
Barcelona Spain
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida