none
consulta para obtener el dia de mañana a partir de la fecha del sistema

    Question

  • Hola a todos tengo la siguiente consulta que me tira los registros del dia de hoy...." pero quisiera saber como seria obtener una consulta que me tire los registros del dia de mañana" . aqui les dejo el codigo que me tira los registros de hoy. saludos y gracias

     

    SELECT     Convert(varchar,Fecha_Contacto), Resultdo_Seguimiento, Proxima_Tarea
    FROM         Eventos_Contactos
    WHERE     (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS DATETIME)= CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))

    Wednesday, March 23, 2011 2:22 PM

Answers

  • Hola,

    Es tan sencillo como sumarle un día a la fecha del GETDATE(). Si registras datos con fechas futuras puedes hacerlo con esto, pero también puedes buscar todos los días que sean después de hoy.

    Por ejemplo:

    Para los registros de mañana:

    SELECT   Convert(varchar,Fecha_Contacto), 
    Resultdo_Seguimiento, Proxima_Tarea
    FROM     Eventos_Contactos
    WHERE   (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS
    DATETIME)= CAST(FLOOR(CAST(GETDATE() + 1 AS FLOAT)) AS DATETIME))
    
    

    Para los registros que sean después de hoy, no necesariamente mañana:

    SELECT   Convert(varchar,Fecha_Contacto),
    Resultdo_Seguimiento, Proxima_Tarea
    FROM Eventos_Contactos
    WHERE   (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS
    DATETIME) > GETDATE()
    

    No entiendo por qué usas esos CAST, GETDATE() trae la fecha al estilo DATETIME, no hay porque darle un CAST. En el caso de la Fecha_Contacto, tampoco se el tipo de datos, pero mas o menos por ahí anda lo que buscas.

    Prueba y si te sirve nos cuentas :)


    Willy Taveras.-
    República Dominicana


    IT Learn - Learning Together
    IT Learn - Teaching Together

    • Marked as answer by Laura Arevalo Wednesday, March 23, 2011 7:40 PM
    Wednesday, March 23, 2011 2:49 PM
    Moderator
  • Laura, sólo indicarte que aunque tengas un índice sobre el campo "fecha_contacto", SQL Server no va a poder usarlo eficientemente por estar "decorando" (aplicando funciones sobre él) su valor.

    El script siguiente es más eficiente en ese sentido:

    SELECT     Convert(varchar,Fecha_Contacto) as Fecha_Contacto, Resultdo_Seguimiento, Proxima_Tarea
    FROM         Eventos_Contactos
    WHERE    Fecha_Contacto BETWEEN CAST(CAST(GETDATE() AS INT) AS DATETIME) AND CAST(CAST(GETDATE() + 1 AS INT) AS DATETIME)

    Wednesday, March 23, 2011 2:53 PM
  • > consulta que me tire los registros del dia de mañana

    Para seleccionar las filas, basado en los valores de la columna [fecha_contacto], para el dia de mañana, los valores de la columna deberan ser mayores o iguales a mañana a las 12:00 am y menores a pasado mañana a las 12:00 am.

    Ejemplo basado en la fecha de hoy (20110323).

    select * from T where fecha_contacto >= '20110324' and fecha_contacto < '20110325';

    Veamos como podemos obtener esos valores de quota, a partir de la fecha de hoy.

    SELECT
    	fecha_hora_actual,
    	DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 1, '19000101') AS fecha_mañana,
    	DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 2, '19000101') AS fecha_pasado_mañana
    FROM
    	(SELECT GETDATE() AS fecha_hora_actual) AS T;
    GO
    

    La idea es usar una fecha de referencia, como 19000101, y calcular el # de días entre la fecha de referencia y la fecha y hora actual. Si le sumamos ese # de dias a la fecha de referencia entonces obtenemos la fecha de hoy a las 12:00 am o cero horas. Si le sumamos un dia mas obtenemos la fecha de mañana y si le sumamos 2 dias, entonces obtenemos la fecha de pasado mañana.

    Dicho lo anterior, podemos usar el query:

    SELECT
        Convert(varchar,Fecha_Contacto), Resultdo_Seguimiento, Proxima_Tarea
    FROM
        Eventos_Contactos >= DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 1, '19000101')
        and Eventos_Contactos < DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 2, '19000101');

    Si te fijas bien, todas las operaciones usadas, son operaciones validas de fecha / hora como son las funciones DATEADD y DATEDIFF.

    El mismo metodo (fecha de referencia) podemos usarlo para calcular otras fechas como son:

    - principio y final del mes
    - principio y final del año
    - etc.

    SELECT
    	fecha_hora_actual,
    	DATEADD([month], DATEDIFF([month], '19000101', fecha_hora_actual), '19000101') AS principio_mes,
    	DATEADD([month], DATEDIFF([month], '18891231', fecha_hora_actual), '18891231') AS final_mes,
    	DATEADD([year], DATEDIFF([year], '19000101', fecha_hora_actual), '19000101') AS principio_año,
    	DATEADD([year], DATEDIFF([year], '18891231', fecha_hora_actual), '18891231') AS final_año
    FROM
    	(SELECT GETDATE() AS fecha_hora_actual) AS T;
    GO
    

    Fijate que las fecha de referencia cambian dependiendo de lo que querramos calcular.




    AMB

    Some guidelines for posting questions...

    • Marked as answer by Laura Arevalo Wednesday, March 23, 2011 7:40 PM
    Wednesday, March 23, 2011 3:27 PM

All replies

  • bueno la respuesta es esta solo hay que sumar +1

    SELECT     Convert(varchar,Fecha_Contacto)as Fecha_Contacto, Resultdo_Seguimiento, Proxima_Tarea
    FROM         Eventos_Contactos
    WHERE     (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS DATETIME)= CAST(FLOOR(CAST(GETDATE()+1 AS FLOAT)) AS DATETIME))

    Wednesday, March 23, 2011 2:44 PM
  • Hola,

    Es tan sencillo como sumarle un día a la fecha del GETDATE(). Si registras datos con fechas futuras puedes hacerlo con esto, pero también puedes buscar todos los días que sean después de hoy.

    Por ejemplo:

    Para los registros de mañana:

    SELECT   Convert(varchar,Fecha_Contacto), 
    Resultdo_Seguimiento, Proxima_Tarea
    FROM     Eventos_Contactos
    WHERE   (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS
    DATETIME)= CAST(FLOOR(CAST(GETDATE() + 1 AS FLOAT)) AS DATETIME))
    
    

    Para los registros que sean después de hoy, no necesariamente mañana:

    SELECT   Convert(varchar,Fecha_Contacto),
    Resultdo_Seguimiento, Proxima_Tarea
    FROM Eventos_Contactos
    WHERE   (CAST(FLOOR(CAST(Fecha_Contacto AS FLOAT)) AS
    DATETIME) > GETDATE()
    

    No entiendo por qué usas esos CAST, GETDATE() trae la fecha al estilo DATETIME, no hay porque darle un CAST. En el caso de la Fecha_Contacto, tampoco se el tipo de datos, pero mas o menos por ahí anda lo que buscas.

    Prueba y si te sirve nos cuentas :)


    Willy Taveras.-
    República Dominicana


    IT Learn - Learning Together
    IT Learn - Teaching Together

    • Marked as answer by Laura Arevalo Wednesday, March 23, 2011 7:40 PM
    Wednesday, March 23, 2011 2:49 PM
    Moderator
  • Laura, sólo indicarte que aunque tengas un índice sobre el campo "fecha_contacto", SQL Server no va a poder usarlo eficientemente por estar "decorando" (aplicando funciones sobre él) su valor.

    El script siguiente es más eficiente en ese sentido:

    SELECT     Convert(varchar,Fecha_Contacto) as Fecha_Contacto, Resultdo_Seguimiento, Proxima_Tarea
    FROM         Eventos_Contactos
    WHERE    Fecha_Contacto BETWEEN CAST(CAST(GETDATE() AS INT) AS DATETIME) AND CAST(CAST(GETDATE() + 1 AS INT) AS DATETIME)

    Wednesday, March 23, 2011 2:53 PM
  • > consulta que me tire los registros del dia de mañana

    Para seleccionar las filas, basado en los valores de la columna [fecha_contacto], para el dia de mañana, los valores de la columna deberan ser mayores o iguales a mañana a las 12:00 am y menores a pasado mañana a las 12:00 am.

    Ejemplo basado en la fecha de hoy (20110323).

    select * from T where fecha_contacto >= '20110324' and fecha_contacto < '20110325';

    Veamos como podemos obtener esos valores de quota, a partir de la fecha de hoy.

    SELECT
    	fecha_hora_actual,
    	DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 1, '19000101') AS fecha_mañana,
    	DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 2, '19000101') AS fecha_pasado_mañana
    FROM
    	(SELECT GETDATE() AS fecha_hora_actual) AS T;
    GO
    

    La idea es usar una fecha de referencia, como 19000101, y calcular el # de días entre la fecha de referencia y la fecha y hora actual. Si le sumamos ese # de dias a la fecha de referencia entonces obtenemos la fecha de hoy a las 12:00 am o cero horas. Si le sumamos un dia mas obtenemos la fecha de mañana y si le sumamos 2 dias, entonces obtenemos la fecha de pasado mañana.

    Dicho lo anterior, podemos usar el query:

    SELECT
        Convert(varchar,Fecha_Contacto), Resultdo_Seguimiento, Proxima_Tarea
    FROM
        Eventos_Contactos >= DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 1, '19000101')
        and Eventos_Contactos < DATEADD([day], DATEDIFF([day], '19000101', fecha_hora_actual) + 2, '19000101');

    Si te fijas bien, todas las operaciones usadas, son operaciones validas de fecha / hora como son las funciones DATEADD y DATEDIFF.

    El mismo metodo (fecha de referencia) podemos usarlo para calcular otras fechas como son:

    - principio y final del mes
    - principio y final del año
    - etc.

    SELECT
    	fecha_hora_actual,
    	DATEADD([month], DATEDIFF([month], '19000101', fecha_hora_actual), '19000101') AS principio_mes,
    	DATEADD([month], DATEDIFF([month], '18891231', fecha_hora_actual), '18891231') AS final_mes,
    	DATEADD([year], DATEDIFF([year], '19000101', fecha_hora_actual), '19000101') AS principio_año,
    	DATEADD([year], DATEDIFF([year], '18891231', fecha_hora_actual), '18891231') AS final_año
    FROM
    	(SELECT GETDATE() AS fecha_hora_actual) AS T;
    GO
    

    Fijate que las fecha de referencia cambian dependiendo de lo que querramos calcular.




    AMB

    Some guidelines for posting questions...

    • Marked as answer by Laura Arevalo Wednesday, March 23, 2011 7:40 PM
    Wednesday, March 23, 2011 3:27 PM
  • Muchas gracias a todos por sus ejemplos y explicacion, funcionaron todos perfectos, los tendre en cuenta gracias. saludos
    Wednesday, March 23, 2011 7:41 PM