Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ordenar registros

Estas en el tema de Ordenar registros en el foro de SQL Server en Foros del Web. Hola gente !! tnego el siguiente problemilla :p tengo un campo varchar(120) en donde se llama la aultura de una direccion entonces lo que ahi ...
  #1 (permalink)  
Antiguo 22/08/2008, 09:10
 
Fecha de Ingreso: enero-2008
Mensajes: 233
Antigüedad: 16 años, 3 meses
Puntos: 2
Ordenar registros

Hola gente !!

tnego el siguiente problemilla :p

tengo un campo varchar(120) en donde se llama la aultura de una direccion

entonces lo que ahi primero son numeros y luego caracter ejemplo


1015-B
152
145-C

como puedo ordenar solamente por los numeros de ese campo?? obtener los numeros de ese campo para luego ordenarlos??


desde ya muchas gracias :P
  #2 (permalink)  
Antiguo 22/08/2008, 09:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ordenar registros

ordenando por el campo tras hacerle un casting a int. No lo he probado:


SELECT campodireccion FROM nombretutabla ORDER BY CAST(campodireccion AS INT)
  #3 (permalink)  
Antiguo 22/08/2008, 09:34
 
Fecha de Ingreso: enero-2008
Mensajes: 233
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Ordenar registros

Mens. 245, Nivel 16, Estado 1, Línea 1
Error de conversión al convertir el valor nvarchar '1049 D. 22 A' al tipo de datos int.

es que en algunos registros tengo caracteres, solamente quiero obtener los numeros :p
  #4 (permalink)  
Antiguo 22/08/2008, 09:47
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Ordenar registros

tendrias que hacer una funcion que te regrese la parte numerica...

pero a medida que el volumen de registros crezca se cobrara contra el tiemp de ejecucion de tu consulta. Si es grande la cantidad de informacion podria incrementarse considerablemente el tiempo.


saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 22/08/2008, 10:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
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
  #6 (permalink)  
Antiguo 28/08/2008, 12:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ordenar registros

Quizás no sirva de mucho, pero recordé que la función val() de Access hacía lo que querías. Hice una búsqueda en la web y encontré esto:
VAL()
The Val() function in Access returns the numeric portion of a string if it appears at the beginning of the string, otherwise 0, e.g.

Val('5561T5') = 5561
Val('T55615') = 0
Val('556165') = 556165

To mimic this functionality in SQL Server, you will need to do a little more:

DECLARE @val VARCHAR(12)
SET @val = '5561T5'
SELECT CONVERT(INT, LEFT(@val,PATINDEX('%[^0-9]%',@val+' ')-1))

Tal vez la solución sea ordenar por ese convert...
  #7 (permalink)  
Antiguo 28/08/2008, 16:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Ordenar registros

En SQL Server no existe una funcion igual, pero ya habiamos comentado en otro hilo que podria crear su propia funcion que cumpliera con sus objetivos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:12.