Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ordenar por los 3 ultimos numeros (https://www.clubdelphi.com/foros/showthread.php?t=30424)

Roilo 05-04-2006 22:13:20

Ordenar por los 3 ultimos numeros
 
Un Abraso al Foro.
FELICIDADES por el nuevo ambiente.
Ok.
Tengo una tabla DBF, en ella hay un campo que guarda un codigo para cada registro. Quisiera obtener una consulta ordenada teniendo en cuenta los tres ultimos números de ese codigo ejemplo:
5101
8101
9101
102
5102
103
5103
8103
si comprendieron la idea les agradeceria que me dijeran como lo puedo lograr.
Gracias de antemano.

alapaco 05-04-2006 22:20:30

Te paso un ejemplo:

SELECT COL1,
SUBSTR (COL1, LENGTH (COL1) - 2) COLUMNA_ORDENADA
FROM TABLA1
ORDER BY 2

Eso anda en Oracle...aunque no se si se puede hacer con archivos DBF..

marcoszorrilla 05-04-2006 22:27:23

Mira este ejemplo:
Código SQL [-]
Select Substring(Codigo from 5 for 7), nombre, Nif
from Clientes
order by 1 desc

Un Saludo.

roman 05-04-2006 22:32:22

El problema que veo es que a juzgar por la muestra que pone Roilo, no todos los valores tienen la misma longitud.

// Saludo

alapaco 05-04-2006 22:33:37

Cita:

Empezado por roman
El problema que veo es que a juzgar por la muestra que pone Roilo, no todos los valores tienen la misma longitud.

// Saludo

Pero en el ejemplo que postee yo, tomo los últimos 3, cual sería el problema ??

marcoszorrilla 05-04-2006 22:40:14

Pues que From indica desde que número empezamos y si los números no son del mismo ancho no funcionará, voy a hacer otras pruebas a ver si logro algo.

Un Saludo.

roman 05-04-2006 22:43:35

Cita:

Empezado por alapaco
Pero en el ejemplo que postee yo, tomo los últimos 3, cual sería el problema ??

¡Ah! Disculpa, iba a comentar al respecto y lo olvidé. Tu solución no tiene ningún problema, es DBase quien lo tiene :D Que yo recuerde no cuenta con la función LENGTH.

// Saludos

JOSEA 06-04-2006 17:29:17

Tomando como partida el de marcoszorrilla
Cita:

Select numero,substring(cast((numero+1000000000) as char(10)) from 8 for 3)
from clientes
order by 2

roman 06-04-2006 18:26:26

MAESTRO JOSEA, en estos momentos me quito el sombrero y me pongo de pie. Pensé que esto iba a ser imposible con dbase o paradox pero ya veo que no. El único pero que podría tener esto es que hay que conocer la longitud máxima que pudieran tener los códigos, pero normalmente esto se sabe. Tu solución no sólo da un método para extrare caracteres de derecha a izquierda sino también sirve para una función tipo PAD también muy requerida. Sólo hay que notar, en esta solución, que si el campo original es de tipo CHAR hay que hacer antes otro CAST a INT.

¡Buenísimo truco!

// Saludos

marcoszorrilla 06-04-2006 19:44:47

Es curioso pero estuve implementando algo parecido, ya que lo que tenía claro es que el funcionamiento dependia de la longitud homegenea de los números, utilice Cast y Substring pero finalmente no me salio y como era tarde lo dejé, pero me alegro de que alguien lo haya llevado a buen término.

Un Saludo.

Roilo 10-04-2006 13:59:16

Gracias
 
Una vez más me impresionan.
Todo ha quedado resuelto con la solución de Josea (FELICIDADES) a ti y al resto del colectivo.
Un abraso.

FOURIER 12-04-2006 13:17:50

:)
 
se me ocurre

select * from Tabla order by int(right(campoordenar,3));

roman 12-04-2006 16:55:25

FOURIER: lo que sucede es que el sql para manejar dbase no cuenta con la función right; de hecho casi no cuenta con ninguna función para cadenas como no sea substring. Por ello es que hay que recurrir a métodos tan rebuscados como los ya descritos.

// Saludos

Roilo 04-09-2006 20:45:49

Saludos
 
Hola, después de casi 4 meses de terminar este hilo, lo retomo porque me ha surgido una nueva. Resulta que ahora estoy conectado a un servidor local MySQL, y este tan discutido código ahora no me corre. Me da un herror en el código de JOSEA :

Código SQL [-]
Select numero,substring(cast((numero+1000000000) as char(10)) from 8 for 3) from clientes
order by 2;



:confused: el error de sintaxis me da serca de : (10)) from 8 for ...
Tengo más o menos entendido que las sintaxis SQL no son las mismas para los diferentes motores de BD,me gustaría que me orientaran al respecto, porque tambien pienso excursionar en MS SQL Server.
GRACIAS de antemano.

marcoszorrilla 04-09-2006 23:04:07

Código SQL [-]
Select Iva, SubString(Cast(iva + 1000000000 as Char(10)) from 8 for 3)
From Factura
Order by 2

Esto me funciona perfectamente.

Un Saludo.


La franja horaria es GMT +2. Ahora son las 08:28:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi