Como Calcular Dias Úteis No SQL Server

Embed Size (px)

Citation preview

  • 7/24/2019 Como Calcular Dias teis No SQL Server

    1/4

    Como calcular dias teis no SQLServer29 de julho de 2015 body_of_rays

    l! "essoal#$om dia%

    &este 'ost irei mostrar como reali(ar diversos c!lculos com dias teis no

    SQL Server# criando uma tabela com todas as informa)*es j! calculadas

    e restando a'enas reali(ar al+uns S,L,C-s sim'les 'ara obter essas

    informa)*es%

    "r./euisito -abela de feriados3m 'r./reuisito 'ara esse 'ost# . voc4 j! ter criado a tabela de feriadosue eu comentei no 'ost Como criar uma tabela com os feriados

    nacionais# estaduais e m6veis7 no SQL Server% ,ssa tabela ser! utili(ada

    'ara identi8car se uma data es'ec8ca . feriado ou n:o%

    "r./euisito ;un)*es 'ara c!lculo de dia tilutro 'r./reuisito 'ara a nossa tabela# s:o < fun)*es utili(adas 'ara

    retornar os dias teis# conforme abai=o

    fncDia_Util_Anterior123456789101112

    1314151617181920

    CREATEFUNCTION>dbo?%>fncDia_Util_Anterior ?@Data_Dia DATETIME7RETURNSDATETIMEASBEGIN

    WHILE1@17 BEGIN

    SET@Data_Dia @@Data_Dia /CASEDATEPARTWEEKDA#@Data_Dia7WHEN1THE

    IFE!ISTSSELECTTOP1Nr_Dia FROMdbo%Feriado WITHNOLOCK7WHERENrNr_Ano @0ORNr_Ano @EAR@Data_Dia777 SET@Data_Dia @@Data_Dia /1 ELSE BREAK

    END

    RETURNCASTFLOORCAST@Data_Dia ASFLOAT77ASDATETIME7

    END

    fncPro"i#o_Dia_Util12345

    CREATEFUNCTION>dbo?%>fncProi!o_Dia_Util ?@Data_Dia DATETIME7RETURNSDATETIMEAS

    BEGIN

    http://www.dirceuresende.com/blog/como-calcular-dias-uteis-no-sql-server/http://www.dirceuresende.com/blog/author/body_of_rays/http://www.dirceuresende.com/blog/como-criar-uma-tabela-com-os-feriados-nacionais-estaduais-e-moveis-no-sql-server/http://www.dirceuresende.com/blog/como-criar-uma-tabela-com-os-feriados-nacionais-estaduais-e-moveis-no-sql-server/http://www.dirceuresende.com/blog/author/body_of_rays/http://www.dirceuresende.com/blog/como-criar-uma-tabela-com-os-feriados-nacionais-estaduais-e-moveis-no-sql-server/http://www.dirceuresende.com/blog/como-criar-uma-tabela-com-os-feriados-nacionais-estaduais-e-moveis-no-sql-server/http://www.dirceuresende.com/blog/como-calcular-dias-uteis-no-sql-server/
  • 7/24/2019 Como Calcular Dias teis No SQL Server

    2/4

    67891011

    1213141516

    1718

    19

    WHILE1@17 BEGIN

    SET@Data_Dia @@Data_Dia ACASEDATEPARTWEEKDA#@Data_Dia7WHEN1TH

    IFE!ISTSSELECTTOP1Nr_Dia FROMdbo%Feriado WITHNOLOCK7WHERENr

    Nr_Ano @0ORNr_Ano @EAR@Data_Dia777 SET@Data_Dia @@Data_Dia A1 ELSE BREAK

    END

    RETURNCASTFLOORCAST@Data_Dia ASFLOAT77ASDATETIME7END

    fncDia_Util123

    4567

    89

    1011

    1213

    1415

    16

    171819

    202122

    CREATEFUNCTION>dbo?%>fncDia_Util?@Data_Dia DATETIME7RETURNSBIT

    ASBEGIN

    DECLARE@retorno BIT

    IFDATEPARTWEEKDA#@Data_Dia7IN1#B77 SET@retorno @0 ELSE BEGIN

    IFE!ISTSSELECTTOP1Nr_Dia FROMdbo%Feriado WITHNOLOCK7WHERENrNr_Ano @0ORNr_Ano @EAR@Data_Dia777 SET@retorno @0

    ELSE

    SET@retorno @1

    END

    RETURN@retornoEND

    Criando a tabela de dias teis'6s criar todos os 'r./reuisitos necess!rios# vamos criar a nossa

    tabela de dias teis%

    123456789101112

    131415

    SETLANGUAGED$ra(ilianDIFOB$ECT_IDDdbo%Eia_3tilD7ISNOTNULL7DROPTABLEdbo%Dia_UtilCREATETABLEdbo%Dia_Util Dt_"eferencia DATETIME# Nr_Dia TININT# Nr_#e$ TININT# Nr_Ano INT# Dt_Dia_Util_Anterior DATETIME# Dt_Proi!o_Dia_Util DATETIME# Fl_Dia_Util BIT# Fl_Dia_Util_%ncl&indo_'abado BIT# Fl_Feriado BIT# Nr_Dia_'e!ana TININT# D$_Dia_'e!ana %ARCHAR1

  • 7/24/2019 Como Calcular Dias teis No SQL Server

    3/4

    161718192021

    2223242526

    2728

    2930

    3132

    3334

    3536

    37383940414243444546474849505152535455565758

    5960

    6162

    6364

    6566

    6768

    6970

    71727374

    7576

    Nr_'e!ana INT# Nr_'e!ana_#e$ INT# Nr_Dia_Ano INT# (t_Dia$_Utei$_#e$ INTNULL# (t_Dia$_Utei$_Ano INTNULL

    7

    DECLARE@Dt_%nicial DATETIME@D19900101D#@Dt_Final DATETIME@D209912

  • 7/24/2019 Como Calcular Dias teis No SQL Server

    4/4

    7778798081

    SET@Dt_%nicial @DATEADDDA#1#@Dt_%nicial7END

    CREATECLUSTERED

    INDE!

    %d01ON

    dbo%Dia_UtilDt_"eferencia7Com isso# conse+uimos a se+uinte tabela

    H isso a# 'essoalI

    t. o 'r6=imo 'ostI