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

Comparar rangos de numeros en campo string

Estas en el tema de Comparar rangos de numeros en campo string en el foro de Bases de Datos General en Foros del Web. Saludos. Necesito comparar rangos de numeros en una consulta en Access, el problema es que el campo que los contiene es de tipo String (ya ...
  #1 (permalink)  
Antiguo 27/08/2008, 05:10
 
Fecha de Ingreso: agosto-2007
Mensajes: 27
Antigüedad: 16 años, 8 meses
Puntos: 0
Comparar rangos de numeros en campo string

Saludos.

Necesito comparar rangos de numeros en una consulta en Access, el problema es que el campo que los contiene es de tipo String (ya que el campo tambien puede contener caracteres). He probado a convertirlo con CInt(), pero no me funciona correctamente:

Select DISTINCT PERSONAS.PK_Victima, Fecha, PERSONAS.*, PK_Acc, Referencia, Cood_Long, Cood_Lat from PERSONAS, ACC where (DateDiff('y','01/01/2007',fecha)>=0) and (DateDiff('y','26/08/2007',fecha)<=0) and PK_Acc=PERSONAS.FK_Accidente and Edad >= CInt('45') and Edad <= CInt('55') order by Fecha, Referencia

y me incluye "5" en el rango de 45-55. Tampoco me deja hacer:

Select DISTINCT PERSONAS.PK_Victima, Fecha, PERSONAS.*, PK_Acc, Referencia, Cood_Long, Cood_Lat from PERSONAS, ACC where FK_Lesividad=1 and (DateDiff('y','01/01/2007',fecha)>=0) and (DateDiff('y','26/08/2007',fecha)<=0) and PK_Acc=PERSONAS.FK_Accidente and CInt(Edad) >= 45 and CInt(Edad) <= 55 order by Fecha, Referencia

"No coinciden los tipos de datos en la expresion de criterios"

¿Alguien sabe como solucionarlo?

Gracias.
  #2 (permalink)  
Antiguo 28/08/2008, 11:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Comparar rangos de numeros en campo string

Cita:
Iniciado por Desfo Ver Mensaje
Saludos.

Necesito comparar rangos de numeros en una consulta en Access, el problema es que el campo que los contiene es de tipo String (ya que el campo tambien puede contener caracteres). He probado a convertirlo con CInt(), pero no me funciona correctamente:

Select DISTINCT PERSONAS.PK_Victima, Fecha, PERSONAS.*, PK_Acc, Referencia, Cood_Long, Cood_Lat from PERSONAS, ACC where (DateDiff('y','01/01/2007',fecha)>=0) and (DateDiff('y','26/08/2007',fecha)<=0) and PK_Acc=PERSONAS.FK_Accidente and Edad >= CInt('45') and Edad <= CInt('55') order by Fecha, Referencia

y me incluye "5" en el rango de 45-55. Tampoco me deja hacer:

Select DISTINCT PERSONAS.PK_Victima, Fecha, PERSONAS.*, PK_Acc, Referencia, Cood_Long, Cood_Lat from PERSONAS, ACC where FK_Lesividad=1 and (DateDiff('y','01/01/2007',fecha)>=0) and (DateDiff('y','26/08/2007',fecha)<=0) and PK_Acc=PERSONAS.FK_Accidente and CInt(Edad) >= 45 and CInt(Edad) <= 55 order by Fecha, Referencia

"No coinciden los tipos de datos en la expresion de criterios"

¿Alguien sabe como solucionarlo?

Gracias.

dos apuntes:
1) según creo, debes usar la función Val y no CInt para eso que quieres. Val(edad) te sacará el primer número y no dará error aunque tengas caracteres alfabéticos en el campo.
2) Usa between:
and Val(edad) between 45 and 55
  #3 (permalink)  
Antiguo 29/08/2008, 02:24
 
Fecha de Ingreso: agosto-2007
Mensajes: 27
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Comparar rangos de numeros en campo string

Gracias, he probado esa forma, y soluciona el problema que tenia.

Sin embargo, aparece otro error. Y es que en caso de empezar el intervalo en 0, también aparecen los registros que son texto.

Select DISTINCT PERSONAS.PK_Victima, Fecha, PERSONAS.*, PK_Acc, Referencia, Cood_Long, Cood_Lat from PERSONAS, ACC,PJ,PROVINCIA,MUNICIPIO where ACC.FK_Municipio=MUNICIPIO.PK_Municipio and MUNICIPIO.FK_PJ=PJ.PK_PJ and PJ.FK_Provincia=1 and (DateDiff('y','01/01/2007',fecha)>=0) and (DateDiff('y','28/12/2007',fecha)<=0) and PK_Acc=PERSONAS.FK_Accidente and Val(Edad) between 0 and 20 order by Fecha, Referencia

Saldría de 0 a 20 años, pero también el valor "Desconocido".
  #4 (permalink)  
Antiguo 29/08/2008, 05:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Comparar rangos de numeros en campo string

Lee el siguiente, pues sin darme cuenta repetí el post
  #5 (permalink)  
Antiguo 29/08/2008, 05:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Comparar rangos de numeros en campo string

Te diré que no entiendo bien el problema, tal vez porque hace mucho tiempo que no trabajo con Access. Dinos cuál es el tipo del campo edad, su valor por defecto, qué tipo de datos metes (ejemplos), cuál es el dato metido que te está dando problemas (dato concreto metido y la salida con val()). Tal vez así podamos ayudarte mejor.
  #6 (permalink)  
Antiguo 29/08/2008, 06:21
 
Fecha de Ingreso: agosto-2007
Mensajes: 27
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Comparar rangos de numeros en campo string

Ok, me explico.

El campo edad, es de tipo Texto.
Puede tener valores numericos (0 a 99) o valor "Desconocida".
Al introducir (por ejemplo) Val(Edad) between 0 and 20 (o cualquier rango empezando en 0), me da como salida las filas de edad entre el 0 y el 20, y además (este es el fallo) las filas de edad "Desconocida".

Eso es lo que quiero evitar.
  #7 (permalink)  
Antiguo 29/08/2008, 07:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Comparar rangos de numeros en campo string

Cierto es que cuando se le aplica la función Val(edad) y edad = "desconocida" o cualquier otra cadena de texto, el valor que devuelve es 0, y si tú utilizas 0 en el rango, se produce la confusión. Te diré que no sé en qué casos utilizas 0 en el rango de edad, pues salvo que se trate de niños menores de un año y habría que ver cómo anotas esas edades, por ej. 4 meses, no deberías tener problemas. Pero si no es así, deberías tener un rango de 1 a 20. Pero eso es un tema que tendrás que ver tú. Ahora tu problema:
si quieres evitar ese desconocida te bastará con añadir en la consulta que tienes AND edad NOT LIKE 'desconocida'

también podrías hacerlo directamente eliminando mediante un if el valor 0 en ese campo sacado de val(). Algo así:

IIf([edadcadena]='desconocida','desconocida',Val([edadcadena])) BETWEEN 0 AND 20
Si edadcadena es "desconocida", el alias prueba devuelve un valor "desconocida"; en los demás casos te devolverá el número que quieres. El único problema es que pudieras haber metido otras cadenas de texto sin número, y volverías a tener 0 en esos casos.

No lo he probado todo.
  #8 (permalink)  
Antiguo 04/09/2008, 01:27
 
Fecha de Ingreso: agosto-2007
Mensajes: 27
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Comparar rangos de numeros en campo string

Muchas gracias jurena. Al final lo he podido solucionar con el NOT LIKE.

Saludos.
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 00:17.