Query, OLE DB y las fechas

3 envíos / 0 nuevos
Último envío
LAN62
Imagen de LAN62
Offline
última acción: Hace 4 meses 5 días
alta: 17/07/2017 - 20:38
Puntos: 70
Query, OLE DB y las fechas

Hola a todos. Tengo una situación estoy alimentando un reporte de excel mediante una consulta de OLE DB. Resulta que tengo problemas con la fecha. Necesito contar todos los registros menores a una fecha especifica dentro del reporte. sin Embargo la data tiene la fecha con horas. Utilice el comando VARCHAR para separar extraer solo la fecha, pero cuando la información se pega en excel claramente esta en texto y no puedo usar en el reporte la función  CONTAR todos los registros "<xx/xx/xxxx", Excel no me cuenta la información porque los valores de fecha estan en texto y colocar un signo "<" pareciera que no lo entendiera.

Asi que se me ocurrio, ya que no puedo solucionar el problema con funciones de excel, hacerlo directamente en el Texto de Comando de DB desde las propiedades de conexión. Aqui es donde necesito ayuda, el comando que me trae esa columna de registro es:

FechaDatos = isnull(CONVERT(VARCHAR(10),x.rs_fechadatos,103),'NULL')

De que manera puedo hacer que haga lo siguiente: si fecha datos es menor o igual al 10/02/2016 colocar 10/02/2016 sino que coloque el valor que le corresponde. Sin cometer error de sintaxis para que lo pueda leer bien.

Si alguien me puede ayudar, sería genial.

 

Etiquetas: 

Cron
Imagen de Cron
Offline
última acción: Hace 18 mins 41 segs
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 8920
¿Me ha parecido que has dicho

¿Me ha parecido que has dicho que hay algo que NO se puede hacer con Excel?

¡Hereje! ¡Fuera de mi vista!

Risa

RisaRisa

 

Ahora en serio. Claro que puedes trabajarlo en Excel. A ti te llega una fecha en formato texto. Tienes que saber en qué formato te llega (dd/mm/aaaa o mm/dd/aaaa). Una vez sabes esto, solo tienes que separar los valores de las barras. Esto lo puedes hacer así (suponiendo que el valor de texto está en A1, y que está en formato dd/mm/aaaa):

día (colocado en la celda B2):

=IZQUIERDA(A1;ENCONTRAR("/";A1)-1)

mes (colocado en la celda C2): 

=EXTRAE(A1;LARGO(B2)+2;ENCONTRAR("/";A1;LARGO(B2)+2)-LARGO(B2)-2)

año (colocado en la celda D2):

=DERECHA(A1;LARGO(A1)-LARGO(B2)-LARGO(C2)-2)

Para componer la fecha, simplemente utiliza la función FECHA:

=FECHA(D2;C2;B2)

 

Todo esto se puede componer en una sola fórmula, aunque queda un churro tal que así:

=FECHA(DERECHA(A1; LARGO(A1)-LARGO(IZQUIERDA(A1; ENCONTRAR("/"; A1)-1))-LARGO(EXTRAE(A1; LARGO(IZQUIERDA(A1; ENCONTRAR("/"; A1)-1))+2; ENCONTRAR("/";A1; LARGO(IZQUIERDA(A1; ENCONTRAR("/"; A1)-1))+2)-LARGO(IZQUIERDA(A1; ENCONTRAR("/"; A1)-1))-2))-2); EXTRAE(A1; LARGO(IZQUIERDA(A1; ENCONTRAR("/";A1)-1))+2; ENCONTRAR("/";A1; LARGO(IZQUIERDA(A1; ENCONTRAR("/";A1)-1))+2)-LARGO(IZQUIERDA(A1; ENCONTRAR("/";A1)-1))-2); IZQUIERDA(A1; ENCONTRAR("/";A1)-1))

 

Todo esto lo puedes hacer con Visual Basic también. Sería muy parecido.

A partir de este momento, si lo que quieres es comparar si es anterior a una fecha, no compares así:

=SI(CeldaFecha<17/05/2017;ValorSiSí;ValorSiNo)       <---- ESTO DARÁ ERROR

Debes comparar con el valor de esa fecha. En nuestro ejemplo, la fecha 17/05/2017 tiene el valor 42872. Por lo tanto, deberías escribir:

=SI(CeldaFecha < 42872;ValorSiSí;ValorSiNo)

Para conocer el valor de una fecha, simplemente escríbela en una celda cualquiera, y cámbiale el formato de celda a "general". El número que sale será el valor interno con el que Excel guarda la fecha que te está mostrando.


Por si no me he explicado correctamente, te dejo un libro en el que he ido resolviendo cada paso que he dado en el post.


Un saludo

 

AdjuntoTamaño
File fecha.xlsx8.73 KB
LAN62
Imagen de LAN62
Offline
última acción: Hace 4 meses 5 días
alta: 17/07/2017 - 20:38
Puntos: 70
Gracias!!!!! Jajaja.. Me

Gracias!!!!! Jajaja.. 

Me funciono, haciendo el ejercicio descrubí que podia agregar una columna nueva a la tabla de datos externos y se actualiza conjuntamente con los datos. Bueno por lo menos yo no lo sabia. Creí que al actualizar los nuevos registros no iban hacer interpretados, pero no es asi.

Te agradezco la ayuda.

Saludos