ordenar x nvarchar

04/01/2005 - 16:39 por ac.net | Informe spam
tengo una tabla con un campo nvarchar que tiene esta data:
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

pero si lo ordeno descendentemente, me ordena

A9
A8
..
A11
A10

que solucion podria implementar.

p.d.: no puedo separar la parte string de la numerica
porque la parte string es un codigo que puede variar, es
decir tambien puedo tener B1, B2... B10, B11... pero
cuando realizo el select ordeno o todas las A## o todas
las B##, etc.

gracias

ac.net

Preguntas similare

Leer las respuestas

#1 Isaias
04/01/2005 - 16:53 | Informe spam
create table mytable (col1 nvarchar(3))
insert into mytable values('A1')
insert into mytable values('A2')
insert into mytable values('A3')
insert into mytable values('A4')
insert into mytable values('A5')
insert into mytable values('A6')
insert into mytable values('A7')
insert into mytable values('A8')
insert into mytable values('A9')
insert into mytable values('A10')
insert into mytable values('A11')
SELECT * FROM MYTABLE ORDER BY CONVERT(INT,SUBSTRING(COL1,2,LEN(COL1))) DESC
Respuesta Responder a este mensaje
#2 Carlos Sacristán
04/01/2005 - 16:56 | Informe spam
Alfabéticamente (no como número), 10 es menor que 2, por lo tanto tienes
que conseguir que la parte numérica que no llegan a la decena añadirles un
'0' delante. Por ejemplo, 'A1' debería ser 'A01'. Hazlo así y el orden será
el que necesitas



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"ac.net" escribió en el mensaje
news:124d01c4f273$979ebce0$
tengo una tabla con un campo nvarchar que tiene esta data:
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

pero si lo ordeno descendentemente, me ordena

A9
A8
..
A11
A10

que solucion podria implementar.

p.d.: no puedo separar la parte string de la numerica
porque la parte string es un codigo que puede variar, es
decir tambien puedo tener B1, B2... B10, B11... pero
cuando realizo el select ordeno o todas las A## o todas
las B##, etc.

gracias

ac.net
Respuesta Responder a este mensaje
#3 ac.net
04/01/2005 - 17:31 | Informe spam
gracias por responder Isaias, pero para poder implementar
esto debo saber la longitud de la parte numerica... y
esta parte numerica puede variar. Es decir puedo tener
registros como A1 y A11... y tener registros como
CDFRK0001 y CDFRK0011. (es que son codigos de facturas de
distintas compañias).

si tienes alguna otra sugerencia.

gracias


create table mytable (col1 nvarchar(3))
insert into mytable values('A1')
insert into mytable values('A2')
insert into mytable values('A3')
insert into mytable values('A4')
insert into mytable values('A5')
insert into mytable values('A6')
insert into mytable values('A7')
insert into mytable values('A8')
insert into mytable values('A9')
insert into mytable values('A10')
insert into mytable values('A11')
SELECT * FROM MYTABLE ORDER BY CONVERT(INT,SUBSTRING


(COL1,2,LEN(COL1))) DESC
.

Respuesta Responder a este mensaje
#4 ac.net
04/01/2005 - 17:32 | Informe spam
gracias por responder Isaias, pero la parte numerica
puede variar. Es decir puedo tener registros como A1 y
A11... y tener registros como CDFRK0001 y CDFRK0011. (es
que son codigos de facturas de distintas compañias), por
lo tanto no puedo controlar la cantidad de numeros que
puede tener el string.

si tienes alguna otra sugerencia.

gracias

Alfabéticamente (no como número), 10 es menor que 2,


por lo tanto tienes
que conseguir que la parte numérica que no llegan a la


decena añadirles un
'0' delante. Por ejemplo, 'A1' debería ser 'A01'. Hazlo


así y el orden será
el que necesitas



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"ac.net" escribió


en el mensaje
news:124d01c4f273$979ebce0$
tengo una tabla con un campo nvarchar que tiene esta




data:
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

pero si lo ordeno descendentemente, me ordena

A9
A8
..
A11
A10

que solucion podria implementar.

p.d.: no puedo separar la parte string de la numerica
porque la parte string es un codigo que puede variar,




es
decir tambien puedo tener B1, B2... B10, B11... pero
cuando realizo el select ordeno o todas las A## o todas
las B##, etc.

gracias

ac.net




.

Respuesta Responder a este mensaje
#5 ulises
04/01/2005 - 19:26 | Informe spam
Pienso que sería preferible realizar el ordenamiento en el
cliente, ... pero en todo caso si necesitas manejarlo
dentro del servidor y aunque no es muy óptimo una forma
sería crear dos funciones de usuario que te separen la
parte fija y la parte númerica y a partir de ahí realizar
el ordenamiento, algo como :

create function fn_obtienePrefijo ( @cadena varchar(200) )
returns varchar(200)
as
begin
declare @prefijo varchar(200)
declare @sec int
select @sec = LEN(@cadena)
while @sec > 0
begin
select @prefijo = substring(@cadena,1, @sec - 1)
where
isnumeric(substring(@cadena,@sec,LEN(@cadena) +1)) = 1
set @sec = @sec - 1
end
return (@prefijo)
end

create function fn_obtieneNumero ( @cadena varchar(200) )
returns int
as
begin
declare @numero int
declare @sec int
select @sec = LEN(@cadena)
while @sec > 0
begin
select @numero convert(int,substring(@cadena,@sec,LEN(@cadena) + 1))
where
isnumeric(substring(@cadena,@sec,LEN(@cadena) + 1)) = 1
set @sec = @sec - 1
end
return (@numero)
end

y de ahí ordenar por el prefijo y por la secuencia

select * from tabla
order by dbo.fn_obtienePrefijo(clave) ,
dbo.fn_obtieneNumero(clave)

Saludos,
Ulises

gracias por responder Isaias, pero la parte numerica
puede variar. Es decir puedo tener registros como A1 y
A11... y tener registros como CDFRK0001 y CDFRK0011. (es
que son codigos de facturas de distintas compañias), por
lo tanto no puedo controlar la cantidad de numeros que
puede tener el string.

si tienes alguna otra sugerencia.

gracias

Alfabéticamente (no como número), 10 es menor que 2,


por lo tanto tienes
que conseguir que la parte numérica que no llegan a la


decena añadirles un
'0' delante. Por ejemplo, 'A1' debería ser 'A01'. Hazlo


así y el orden será
el que necesitas



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"ac.net" escribió


en el mensaje
news:124d01c4f273$979ebce0$
tengo una tabla con un campo nvarchar que tiene esta




data:
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11

pero si lo ordeno descendentemente, me ordena

A9
A8
..
A11
A10

que solucion podria implementar.

p.d.: no puedo separar la parte string de la numerica
porque la parte string es un codigo que puede variar,




es
decir tambien puedo tener B1, B2... B10, B11... pero
cuando realizo el select ordeno o todas las A## o todas
las B##, etc.

gracias

ac.net




.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida