sábado, 16 de dezembro de 2017

#18 – Para que serve

Por Junior Galvão em 15/12/2017.

Resultado de imagem para sql server 2017

Este é mais um post da sessão Para que serve, nesta última sexta-feira de aulas aqui na Fatec São Roque, hoje meu queridos pimpolhos não estão presentes, final de semestre é sempre assim eles somem, mas eu estou aqui vivinho da silva e pronto para compartilhar um pouco do conhecimento adquirido nos alguns dias.
Hoje não vou destacar novidades adicionadas ao Microsoft SQL Server em suas últimas versões, ao contrário quero trazer para você um exemplo de código que poderá lhe ajudar muito ainda mais com um novo ano que esta se aproximando rapidamente. Sempre nesta época do ano diversos estabelecimentos comerciais, lojas e demais locais de compra e venda gostam de ofertar aos seus clientes aquele tradicional folhinha ou calendário mensal do próxima ano.
É justamente isso que este novo post da sessão Para que serve tem o objetivo de trazer, apresentar como podemos através de um script desenvolvido no Microsoft SQL Server criar um calendário mensal ou anual igualzinho aqueles que ganhamos nos finais de ano.
O melhor ainda neste calendário é que nossa tabela será estrutura respeitando rigorosamente os dias da semana e seus respectivos nomes. Sendo assim, chegou a hora de conhecer um pouco mais sobre estas novas funções, desta forma, seja bem vindo ao #18 – Para que serve – Criando um calendário mensal com dias da semana.

Introdução
Um dos elementos mais comuns de se encontrar nas casas, apartamentos, escolas e demais locais de convivência é um calendário ou folhinha de meses e dias pregada nas paredes, afixada em geladeiras, portas retratos entre outros locais de fácil acesso e visualização para todos.
O elemento chamado de calendário criado a milhares de anos tem como principal função ajudar nós pessoas a nos identificar no tempo, ou seja, trata-se de um recurso tão básico mas de extrema importância no que diz respeito ao dia-a-dia das pessoas e suas atividades.
Este tipo de recurso não poderia estar ausente no Microsoft SQL Server, não que ele esteja totalmente presente, mas através das funcionalidades existentes na linguagem Transact-SQL ou simplesmente T-SQL temos total capacidade de criarmos o nosso calendário mensal ou até mesmo anual contendo os dias da semana, o número da semana e posteriormente demais dados necessários que possam compor o seu calendário.
Para que você possa acompanhar o processo de criação deste calendário personalizado, vamos utilizar como base para nosso cenário uma simples tabela denominada CalendarioMensal, nome mais do que sugestivo, começamos então pela criação desta tabela conforme apresenta o Bloco de Código 1 a seguir:
-- Bloco de Código 1 - Criando a Tabela CalendarioMensal --
Create Table CalendarioMensal
(Contador TinyInt Identity(1,1) ,
Semana SmallInt,
Segunda TinyInt Null,
Terca TinyInt Null,
Quarta TinyInt Null,
Quinta TinyInt Null,
Sexta TinyInt Null,
Sabado TinyInt Null,
Domingo TinyInt Null)
Go
Show nossa tabela CalendarioMensal esta criada e pronta para ser utilizada, nosso próxima passo é começar a estruturar o ambiente para darmos inicio a inserção dos dados que vão compor o calendário, neste caso, vamos estabelecer o dia inicial da semana e evitar a contagem de linhas a cada manipulação de dados, para tal vamos o Bloco de Código 2 conforme apresentado abaixo:
-- Bloco de Código 2 - Definindo o dia inicial da semana e evitando a contagem de linhas --
-- Definindo o dia inicial da semana --
Set DateFirst 7
Go
-- Desativando a contagem de linhas após manipulação de dados --
Set NoCount On
Go
Nosso próximo passo consiste na declaração das variáveis que iremos utilizar para definir o período de dias ou período mensal que queremos criar, desta forma, vamos utilizar as variáveis: @InicioDeMes, @FinalDeMes e @Contador, conforme o Bloco de Código 3apresentado abaixo:
-- Bloco de Código 3 - Definição e atribuição das variáveis --
-- Declarando e definindo as variáveis --
Declare @InicioDeMes Datetime,
@FinalDeMes Datetime,
@Contador TinyInt
-- Atribuindo os valores para as variáveis --
Set @InicioDeMes = '2018-01-01'
Set @FinalDeMes = '2018-01-31'
Set @Contador = 1
Observe que estou definindo o período de dias que correspondem ao mês de janeiro de 2018, sendo assim, nosso calendário mensal será criado respeitando a quantidade de dias e períodos de semana específicos do próximo mês de janeiro.
Ufa, estamos caminhando bem, vamos em frente, agora já se aproximando do processo de inserção do respectivo período de dias informado anteriormente e na sequência a atualização de cada dia de acordo com o exclusivo e respectivo dia da semana, vamos então conhecer o Bloco de Código 4 apresentado abaixo, não se esqueça de executar este bloco pois ele é o mais importante:
-- Bloco de Código 4 - Loop para inserção e atualização dos dias referentes ao mês informando --
While @InicioDeMes <= @FinalDeMes
Begin
-- Inserindo os valores na Tabela Calendário --
Insert Into CalendarioMensal Default Values
While 1<=@Contador
Begin 
Update CalendarioMensal 
               Set Segunda = Case When DatePart(WeekDay,@InicioDeMes) = 2 Then DatePart(Day,@InicioDeMes) Else Segunda End,
              Terca = Case When DatePart(WeekDay,@InicioDeMes) = 3 Then DatePart(Day,@InicioDeMes) Else Terca End,
             Quarta = Case When DatePart(WeekDay,@InicioDeMes) = 4 Then DatePart(Day,@InicioDeMes) Else Quarta End,
             Quinta = Case When DatePart(WeekDay,@InicioDeMes) = 5 Then DatePart(Day,@InicioDeMes) Else Quinta End,
              Sexta = Case When DatePart(WeekDay,@InicioDeMes) = 6 Then DatePart(Day,@InicioDeMes) Else Sexta End,
              Sabado = Case When DatePart(WeekDay,@InicioDeMes) = 7 Then DatePart(Day,@InicioDeMes) Else Sabado End,
              Domingo = Case When DatePart(WeekDay,@InicioDeMes) = 1 Then DatePart(Day,@InicioDeMes) Else Domingo End,
              Semana = IsNull(DatePart(Week, Segunda),Year(GetDate()-1))
Where Contador = @Contador 
And DatePart(Month,@InicioDeMes) = DatePart(Month,@FinalDeMes)
If DatePart(WeekDay,@InicioDeMes) = 1 
Break
Set @InicioDeMes = Dateadd(Day,1,@InicioDeMes) 
End
Set @InicioDeMes = Dateadd(Day,1,@InicioDeMes) 
Set @Contador = @Contador + 1
End
Go
Observação: Você pode estar se perguntando o porque estou utilizando o comando Update no bloco de código 4, a resposta é bem simples, analise que no comando Update estou tratando cada dia da semana de forma única para identificar ao qual dia da semana o dia que foi inserido anteriormente pertence e desta forma é feita a atualização do dia na coluna ao qual ele corresponderia na calendário impresso.
Já estamos no final, o mais complicado e talvez difícil de ser feito foi realizado e espero que tudo tenha ocorrido corretamente que se relaciona a inserção dos dados na tabela CalendarioMensal, se você chegou até é porque conseguiu, então vamos avançar mais um passo e agora ver como nossos dados forma inseridos e serão apresentado em tela, para tal procedimento utilize o Bloco de Código 5 declarado na sequência:
-- Bloco de Código 5 - Visualizando o Calendário Mensal e seus respectivos dias e semanas --
Select Semana As 'Numero da Semana',
            Segunda As 'Segunda-Feira',
            Terca As 'Terça-Feira',
            Quarta As 'Quarta-Feira', 
            Quinta As 'Quinta-Feira',
            Sexta As 'Sexta-Feira',
            Sabado As 'Sábado',
            Domingo As 'Domingo'
From CalendarioMensal
Go
Afim de ilustrar e comprovar o resultado apresentado pelo Bloco de Código 5, apresento a seguir a Figura 1 abaixo:

Figura 1 - Calendário Mensal correspondente ao mês de janeiro de 2018.
Show, show, sensacional é isso ai, conseguimos, chegamos ao final de mais um post da sessão Para que serve.

Referências

Nenhum comentário:

Postar um comentário