Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/03/2012, 17:22
omarock
 
Fecha de Ingreso: marzo-2012
Ubicación: Mexico
Mensajes: 17
Antigüedad: 12 años, 2 meses
Puntos: 1
Complicaciones con el uso de AND y un campo

Hola amigos, un saludo, pues soy nuevo por aca, espero me puedan ayudar con un problemilla que surgio.

Les contare un poco:
Tengo una tabla con un campo llamado linkacct de tipo char, este campo recibe todo tipo de formatos (numeros, texto, fechas). Bueno entonces en mi consulta lo que me interesa es tomar los valores que son con un formato de fecha, este tipo de dato solo se da cuando otro campo llamado asunto tiene la palabra mantenimiento, osea que solo si asunto es mantenimiento el dato de linkacct es una fecha.

Bueno en una consulta quiero obtener los mantenimientos que aun estan activos. Algo sencillo a primera vista, pero ahi es en donde se presenta el problema:

Tengo algo como esto:

Select tabla1.producto,
tabla2.linkacct as 'Fecha'
From tabla1, tabla 2
Where tabla1.asunto='Mantenimiento' AND tabla1.codigo=tabla2.codigo

Con esto no tengo ningun problema. Pero necesito dos lineas mas y ahi es donde viene el problema, necesito una columna que de la diferencia entre la fecha actual y el dia en que vence el mantenimiento, y necesito agregar un AND con la condicion de que el mantenimiento sea mayor que la fecha actual.

Algo como esto:

Select tabla1.producto,
tabla2.linkacct as 'Fecha',
datediff(month,getdate(),tabla2.linkacct) as 'diferencia'
From tabla1, tabla 2
Where tabla1.asunto='Mantenimiento' AND tabla1.codigo=tabla2.codigo AND tabla2.linkacct >getdate()

Aqui me marca un error, en el datediff y en la condicion de fechas, esto puede ser obvio porque el campo es tipo "char", entonces lo que intente hacer es usar el CONVERT, pero no estoy muy seguro que lo haya utilizado bien, hize algo como esto:

Select tabla1.producto,
tabla2.linkacct as 'Fecha',
datediff(month,getdate(),convert(datetime,tabla2.l inkacct,AQUI USE VARIOS ESTILOS 20,21,120,121,126) as 'diferencia'
From tabla1, tabla 2
Where tabla1.asunto='Mantenimiento' AND tabla1.codigo=tabla2.codigo AND convert(datetime,tabla2.linkacct,VARIOS ESTILOS) >getdate()

Use varios estilos porque el formato de la fecha es aaaa-mm-dd
Entonces sigo teniendo el mismo resultado: Error.
Mi teoria es: que como el campo linkacct recibe diferentes formatos el sistema trata de hacer la conversion para todos los datos, no solo para los de formato de fecha.
Algo que se me ocurrio hacer es algo asi como una preseleccion, primero "filtrar" los valores por mantenimiento y despues hacer todos las operaciones que necesito, pero no se como hacer esto.

Espero a alguno de ustedes se les ocurra algo interesante y lo compartan conmigo.

Perdon por extenderme tanto, pero no fue mi culpa :)
Nota: como soy nuevo no se si este mensaje va en esta zona, si esta mal, espero que algun moderador lo mueva.
Saludos