none
como calcular la fecha de un dia antes de la fecha ingresada y si el dia es lunes deberia incluir la fecha del viernes

    Question

  • Holas,este es mi actual codigo el cual solo filtra la fecha del mismo dia:

    CREATE PROCEDURE [dbo].[ccoIntefaseDocumento_Sel_RecuperarPagoSpring]   
    @Fecha VARCHAR(10),   
    @Sucursal CHAR(4) 
    AS 
    BEGIN 
    SET DATEFORMAT DMY 
    SELECT 
    ID.TipoDocumento 
    ,ID.NumeroInterno 
    ,'NombreCompleto'=A.NombreCompleto 
    ,A.IdActor 
    ,'Estado'= CASE ID.Estado   WHEN 'EN' THEN 'ENVIADO' WHEN 'GE'  THEN 'GENERADO' WHEN 'PR' THEN 'FACT-SPRING' WHEN 'CO' THEN 'COBRADO EN SPRING' END 
    ,ID.IdMatricula 
    ,'FechaVencimiento'=dbo.fecha(ID.FechaVencimiento)  
    ,'FechaVencimientoN'=ID.FechaVencimiento  
    ,ID.TipoVenta,ID.TipoFacturacion,ID.EstablecimientoCodigo 
    ,ISNULL(CAST(ID.ClienteCobrarA AS VARCHAR(20)),'') AS ClienteCobrarA 
    ,'Criteria'=ISNULL(ID.Criteria,''),MonedaCodigo=ISNULL(ID.MonedaCodigo,''),ID.Sucursal,ID.Vendedor 
    ,'EstadoN'=ID.Estado,ID.FlagActualizacion 
    ,'NotaCreditoDocumento'=ISNULL(ID.NotaCreditoDocumento,'') 
    ,Descuento=ISNULL(ID.Descuento,'')  ,ID.FechaPreparacion 
    FROM OPENQUERY ([pldb01],'select * from springprueba.dbo.CO_Interfase_P09_Header')  ID  
    INNER JOIN Matricula M ON ID.IdMatricula=M.IdMatricula 
    INNER JOIN Actor A ON ID.Cliente=A.IdActor 
    WHERE (dbo.Fecha112(ID.FechaPreparacion)= dbo.Fecha112(@Fecha) )   
    AND ID.Sucursal=@Sucursal    AND ID.Estado='CO' 

     

    Pero,si ingreso la fecha 31/01/2012,deberia filtrar los dia del 30/01/2012 y del mismo dia 31,como haria eso?

    Pero tmb esta el caso que se un lunes,y deba buscar la fecha del dia viernes,y lunes claro,

    como podria manejar estos casos?

    gracias

    slds


    Desarrolladora
    Tuesday, January 31, 2012 4:46 PM

Answers

  • Hola

    Por lo que he entendido, la condición quedaría asi:

    Al inicio tendrias que hacer que el primer dia de la semana sea Lunes

    set datefirst 1

    .....

    .....

    WHERE (ID.FechaPreparacion)>= case when datepart(dw,@Fecha)=1 then @Fecha-3 else @Fecha-1 end

    Si "datepart(...)" es 1 osea Lunes, que me reste 3 dias, sino que me reste 1 dia (el dia anterior)

    Claro, como te recomiendan, la variable @Fecha debería ser DateTime, y el campo FechaPreparacion tambien. Si no tendrías que hacer algunas conversiones adicionales.

    Saludos

    JORGE

    • Marked as answer by Rosita_Lima Wednesday, February 01, 2012 5:12 PM
    Tuesday, January 31, 2012 5:23 PM

All replies

  • No termino de entender la condición. ¿Puedes explicarla de otro modo?

    Por otro lado, si el campo "FechaPreparacion" es tipo fecha (DATETIME, SMALLDATETIME, DATE), deberías pasarle al procedimiento almacenado un campo del mismo tipo, y en la llamada a dicho procedimiento es cuando deberías pasarle la fecha en un formato que no diera problemas, como puede ser YYYYMMDD. Aplicar funciones como lo estás haciendo tú no es una buena práctica y te puede dar problemas de rendimiento

    Tuesday, January 31, 2012 5:03 PM
  • No termino de entender la condición. ¿Puedes explicarla de otro modo?

    Por otro lado, si el campo "FechaPreparacion" es tipo fecha (DATETIME, SMALLDATETIME, DATE), deberías pasarle al procedimiento almacenado un campo del mismo tipo, y en la llamada a dicho procedimiento es cuando deberías pasarle la fecha en un formato que no diera problemas, como puede ser YYYYMMDD. Aplicar funciones como lo estás haciendo tú no es una buena práctica y te puede dar problemas de rendimiento

    la condición es ,que la fecha ingresada por ejemplo es 31/01/2012,en mi filtro deberia aparecer todos aquellos de la fecha del 30 y 31 /01//2012 ,deberian aparecer los de un dia antes.

    la otra consulta es cuando el dia ingresado fue lunes,deberia incluir 2 dia antes,para q salgan los del viernes y del mismo lunes,pero en sql nosé q funciones deberia usar.

    gracias x tu ayuda.

    Pd: Bueno manejamos esas funciones en la fecha en todo el aplicativo,para ingresarlas asi ='01/01/2012',en vez e 20120101 ...pero puedo modificar eso,si es necesario.

     


    Desarrolladora
    Tuesday, January 31, 2012 5:17 PM
  • Hola

    Por lo que he entendido, la condición quedaría asi:

    Al inicio tendrias que hacer que el primer dia de la semana sea Lunes

    set datefirst 1

    .....

    .....

    WHERE (ID.FechaPreparacion)>= case when datepart(dw,@Fecha)=1 then @Fecha-3 else @Fecha-1 end

    Si "datepart(...)" es 1 osea Lunes, que me reste 3 dias, sino que me reste 1 dia (el dia anterior)

    Claro, como te recomiendan, la variable @Fecha debería ser DateTime, y el campo FechaPreparacion tambien. Si no tendrías que hacer algunas conversiones adicionales.

    Saludos

    JORGE

    • Marked as answer by Rosita_Lima Wednesday, February 01, 2012 5:12 PM
    Tuesday, January 31, 2012 5:23 PM
  • Hola

    Por lo que he entendido, la condición quedaría asi:

    Al inicio tendrias que hacer que el primer dia de la semana sea Lunes

    set datefirst 1

    .....

    .....

    WHERE (ID.FechaPreparacion)>= case when datepart(dw,@Fecha)=1 then @Fecha-3 else @Fecha-1 end

    Si "datepart(...)" es 1 osea Lunes, que me reste 3 dias, sino que me reste 1 dia (el dia anterior)

    Claro, como te recomiendan, la variable @Fecha debería ser DateTime, y el campo FechaPreparacion tambien. Si no tendrías que hacer algunas conversiones adicionales.

    Saludos

    JORGE

    ok creo que maneja con datetime,voya probarlo

    Desarrolladora
    Tuesday, January 31, 2012 5:37 PM
  • Hola alguien me puede ayudar, soy nuevo en sqlserver:

    necesito obtener el dia de una fecha ingresada, por ejemplo:

    ingreso 22/12/2012 y quiero que me muestre sabado.

    Saludos.

    Wednesday, November 28, 2012 11:22 AM