SQL Server Performance

Listar fechas por semanas

Discussion in 'Preguntas sobre SQL Server en Español.' started by fjac_pe, Feb 8, 2005.

  1. fjac_pe New Member

    Hola, quiero listar un rango de fechas pero por dia de semana, numero de semana y año,
    use el siguiente codigo, resulta pero queria ver si hay otra manera de realizar lo mismo, si no entienden lo que quiero me consultan, gracias
    2004351 = año 2004, semana 35, dia 1 que significaria al 23/08/04



    SET DATEFIRST 1
    SELECT *
    FROM FechasMinLab
    where
    CAST(cast(year(Fech_fecha) as varchar(20)) +
    RIGHT( '00' + CAST(DATEPART(wk, Fech_fecha) as varchar(20)),2) +
    cast(DATEPART(dw, Fech_fecha) as varchar(20)) AS NUMERIC(20,0)) >=2004351
    and
    CAST(cast(year(Fech_fecha) as varchar(20)) +
    RIGHT( '00' + CAST(DATEPART(wk, Fech_fecha) as varchar(20)),2) +
    cast(DATEPART(dw, Fech_fecha) as varchar(20)) AS NUMERIC(20,0)) <=2005045
  2. c_maldon Member

    Segun yo veo, otra opción podría ser transformar los valores de entrada en lugar de todos los registros de la tabla FechasMinLab.
    Además, como la columna Fech_fecha forma parte de un índice, estas anulando su uso al transformar el campo con las funciones datepart cast etc.

    Te mando un ejemplo que retornaría las mismas fechas que el de tu Post.

    Saludos

    Set DateFirst 1

    Declare @cDesde char(7)
    Declare @nAñoDesde int
    Declare @nSemanaDesde int
    Declare @nDiaDesde int

    Declare @cHasta char(7)
    Declare @nAñoHasta int
    Declare @nSemanaHasta int
    Declare @nDiaHasta int

    Declare @dDesde datetime
    Declare @dHasta datetime

    Set @cDesde = '2004351'
    Set @cHasta = '2005045'

    Set @nAñoDesde = substring(@cDesde,1,4)
    set@nSemanaDesde = substring(@cDesde,5,2)
    set@nDiaDesde = substring(@cDesde,7,1)

    Set @nAñoHasta = substring(@cHasta,1,4)
    set@nSemanaHasta = substring(@cHasta,5,2)
    set@nDiaHasta = substring(@cHasta,7,1)

    Set@dDesde = DateAdd(dayofyear, ( @nSemanaDesde - 1) * 7 - (datepart(dw,'01/01/'+ str(@nAñoDesde))- @nDiaDesde ) , '01/01/'+ str(@nAñoDesde) )
    Set@dHasta = DateAdd(dayofyear, ( @nSemanaHasta - 1) * 7 - (datepart(dw,'01/01/'+ str(@nAñoHasta))- @nDiaHasta ) , '01/01/'+ str(@nAñoHasta) )

    select @dDesde ,@dHasta

    Select *
    From FechasMinLab
    where Fech_fecha >= @dDesde
    And Fech_fecha <= @dHasta

  3. fjac_pe New Member

    Ok, muchas gracias

Share This Page