Upload
brunopdsnk
View
218
Download
0
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