none
Declarar variávem em Table Function RRS feed

  • Pergunta

  • Olá pessoal,

     

    Tenho uma procedure mas gostaria de transformá-la em TableFunction, o problema é que preciso declarar variáveis e não estou conseguindo, veja a procedure, basicamente ela me retorna o dia da semana e qual é a repetição do dia da semana no mês (tipo se é a 3ª segunda-feira do mês)

     

    Code Block

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    ALTER PROCEDURE Proc_Dia_Semana

    @Data_Dia datetime

    AS

    Declare @DiaSemana as char(1),@UltimoDiaMes as char(2)

    if datepart(mm,@Data_Dia)=02

    Begin

    if datepart(yyyy,@Data_Dia) % 4 <> 0

    Set @UltimodiaMes=28

    end

    else

    Begin

    if datepart(mm,@Data_Dia)=01

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=03

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=04

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=05

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=06

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=07

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=08

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=09

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=10

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=11

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=12

    Set @UltimoDiaMes=31

    End

    if (cast(@Data_Dia as datetime) - 7) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='1'

    else

    if (cast(@Data_Dia as datetime) - 14) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='2'

    else

    if (cast(@Data_Dia as datetime) - 21) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='3'

    else

    if (cast(@Data_Dia as datetime) + 7) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-'+@UltimoDiaMes as datetime)

    set @DiaSemana='4'

    else

    set @DiaSemana='5'

    select Dia=

    Case datepart(dw,@Data_Dia)

    When 1 then 'Domingo'

    When 2 then 'Segunda-Feira'

    When 3 then 'Terça-Feira'

    When 4 then 'Quarta-Feira'

    when 5 then 'Quinta-Feira'

    When 6 then 'Sexta-Feira'

    When 7 then 'Sabado'

    End,

    @DiaSemana as SemanaMes

    GO

     

     

     

    sexta-feira, 14 de dezembro de 2007 14:11

Todas as Respostas

  • Olá RickMura,

     

    Veja se o código abaixo o atende:

     

    CREATE FUNCTION dbo.udf_DiaSemana (@Data_Dia DATETIME)

    RETURNS @Retorno TABLE (DIA VARCHAR(20), SemanaMes TINYINT)

    AS

    BEGIN

    --Declare @Data_Dia DATETIME

    --SET @Data_Dia = '2007-12-01'

    Declare @DiaSemana as char(1),@UltimoDiaMes as char(2)

    if datepart(mm,@Data_Dia)=02

    Begin

    if datepart(yyyy,@Data_Dia) % 4 <> 0

    Set @UltimodiaMes=28

    end

    else

    Begin

    if datepart(mm,@Data_Dia)=01

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=03

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=04

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=05

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=06

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=07

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=08

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=09

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=10

    Set @UltimoDiaMes=31

    if datepart(mm,@Data_Dia)=11

    Set @UltimoDiaMes=30

    if datepart(mm,@Data_Dia)=12

    Set @UltimoDiaMes=31

    End

    if (cast(@Data_Dia as datetime) - 7) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='1'

    else

    if (cast(@Data_Dia as datetime) - 14) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='2'

    else

    if (cast(@Data_Dia as datetime) - 21) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-01' as datetime)

    set @DiaSemana='3'

    else

    if (cast(@Data_Dia as datetime) + 7) < Cast(DatePart(yyyy,@Data_dia)+'-'+DatePart(mm,@Data_Dia)+'-'+@UltimoDiaMes as datetime)

    set @DiaSemana='4'

    else

    set @DiaSemana='5'

    INSERT INTO @Retorno

    select --Dia=

    Case datepart(dw,@Data_Dia)

    When 1 then 'Domingo'

    When 2 then 'Segunda-Feira'

    When 3 then 'Terça-Feira'

    When 4 then 'Quarta-Feira'

    when 5 then 'Quinta-Feira'

    When 6 then 'Sexta-Feira'

    When 7 then 'Sabado'

    End As Dia, @DiaSemana as SemanaMes

    RETURN

    END

    GO

    SELECT * FROM dbo.udf_DiaSemana ('2007-12-14')

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 14 de dezembro de 2007 15:48