¿Se puede tratar formato de texto como numero?

En una base de datos tengo un campo de texto que lo relleno con los valores 1/09, 2/09, 3/09.... 1/10, 2/10, 3/10.... 1/11, 2/11 etc. El 1, 2, 3, .. Etc se refiere a un numero de registro y el /09, /10, /11... Es el año en que se registra. Si ordeno de la A-Z se colocan así: 1/09, 1/10,1/11, 10,11,12,..., 100,101,..., 2, 20,21,..., 3, 30, 31,.. Etc.
Mi pregunta es que formato darle a los datos para que los ordene primero los del primer año (/09) correlativos 1/09, 2/09... Después los del /10 etc.

1 respuesta

Respuesta
1
Tendrías que ordenar primero por los dos últimos dígitos, es decir por el año. Para ello utiliza la función Der() (derecha). Si por ejemplo el campo se llama código pondrías:
Der([Codigo];2) es decir, selecciona los 2 dígitos de la derecha.
Para seguir tendría que saber si el número de registro, el 1, 2, 3... tiene un dígito o más, si tiene un dígito primero ordenas por el año, con la función Der() y después por el campo, si puede tener tiene más de un dígito tendremos que utilizar la función Izq (izquierda) y la función EnCad (Está en la cadena), me explico, con la función izquierda seleccionamos el número de caracteres que queramos empezando por el 1º de la izquierda, pero en este caso no sabemos el número exacto (en la derecha si lo sabíamos, siempre son 2), pero como por la izquierda no sabemos si son 1, 2, 3... solo sabemos que es hasta que está el signo /. Como la función enCad nos da la posición de una cadena dentro de otra si ponemos EnCad([Codigo];"/") nos dará la posición del signo / y podemos utilizar la función Izq() de esta forma:
 Izq([codigo];EnCad([codigo];"/")-1)
Es decir seleccioname los caraceteres de la izquierda hasta /
Me cuentas.
Hola Angeles, gracias por la respuesta.
He probado lo que me comentas, incluso variando los términos y no me da resultado, el campo donde se almacena el registro es de texto y se llama NOTA_SERV, ahora hay registros desde 1/11 hasta 155/11 y supongo que a final de año habrá hasta unos 1500/11 y empezaré el año próximo en 1/12 y así sucesivamente dentro de la misma tabla, este sistema me interesa también para otra BD que tengo de años pasados.
Según tus indicaciones creo que la función debería de ser al menos hasta ahora:
Der([NOTA_SERV];2);Izq([NOTA_SERV];EnCad([NOTA_SERV];"/")-3)
y puesta en la consulta en diseño, propiedades, Ordenar por,
se me ordenan así: 1/11, 10/11, 100/11, 101/11,.......109/11, 11/11, 110/11,111/11...etc igual lo he hecho mal, espero tu opinión.
Saludos, José Luis.
En una columna
Der([NOTA_SERV];2)   --------> Orden Ascendente
En la columna siguiente:
Val(Izq([NOTA_SERV];EnCad([NOTA_SERV];"/")-1)) -----> Orden ascendente
La función EnCad te da la primera posición en que encuentra la cadena buscada (en este caso buscamos /), es decir si tienes 110/ te dará =4, si tienes 1/ te dará =2
Como la función Izq() es Campo;Nº de caracteres a buscar, tendrá que ser el resultado de EnCad-1, es decir desde el primero hasta donde está / menos 1.
Como tienes 1, 10, 111, 2, 21... (que es el resultado de seleccionar los por caracteres de la izquierda) no te los ordenaría bien ya que te pondría por ejemplo el 10 delante del 2.Con la función Val pasas el texto a numérico y de esa forma el orden sería el correcto. (De esto no me había dado cuenta en mi anterior respuesta)
Me cuentas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas