Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/08/2008, 10:19
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 2 meses
Puntos: 300
Respuesta: Ordenar registros

Pablokes,

no trabajo con SQL server, y no conozco bien los CASTING, pero en MySQL, el gestor que uso, lo hace perfectamente, pues trunca al encontrar el primer carácter no numérico. No sé si el problema es la letra D, el punto o el número siguiente. Deberías probar algún otro casting a numérico en SQL, tras ver con detalle lo que ocurre con esos cambios de un tipo a otro. Creo que lo resolverás con un CASTING, pero no sé cuál. Si te estorbara el punto, podrías hacer un casting a INT, pero tras un REPLACE que elimine el punto, siempre en el campo que ordena.
Para ordenar,si el problema es el guión
SELECT campo
FROM tabla
ORDER BY cast( replace( campo, '-', '' ) AS INT )


Otra opción que se me ocurre, puesto que el número parece ser lo primero, es cortar el campo con un locate que busque el primer espacio en blanco y un substring que vaya desde el principio hasta ese punto menos un carácter, y a todo eso le haces el CASTING a INT. ESto creo que funcionará. Hablo siempre del valor por el que harás el ORDER BY.

EDITO:
Dinos si existe algún denominador común en esa cadena tras el número por el que quieres ordenar; por ej., si siempre tienes detrás un guión. Si hubiera un denominador común, podrías cortar para luego hacer el casting.
Fíjate en esto: es para MySqL, pero creo que se parecería mucho en SQL server. Aquí trunco por el espacio en blanco, el CHAR(32), que hay detrás de cada número, si es que lo hay, claro:
SELECT numeroletra FROM tabla
ORDER BY cast( if( locate( char( 32 ) , numeroletra ) >0, left( numeroletra, locate( char( 32 ) , numeroletra ) -1 ) , numeroletra ) AS unsigned)

En sql no es unsigned, sino int, y no sé si lo demás te valdrá, pero es sólo una idea.

Última edición por jurena; 22/08/2008 a las 11:04