Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Tutorial de SQL
SEÇÕES
Manuais relacionados
+Tutorial de SQL
Categorias
+Linguagem SQL

Índice do Manual Tutorial de SQL
+ O que é SQL
+ Tipos de campos
+ Adicionar um novo registro
+ Apagar um registro
+ Atualizar um registro
+ Seleção de tabelas I
+ Seleção de tabelas II
+ Seleção de tabelas III
+ Seleção de tabelas IV
+ Aproveite seu banco de dados
+ Tabelas temporárias no Sql Server
+ Adquirindo informações do Usuário com a classe System
+ Alguns truques práticos
+ Criação de tabelas
+ SQL e Programação de Banco de Dados
+ Funções para buscas com datas em Access
+ Função em SQL para o cálculo de dias de trabalho
+ SQL com Oracle
+ SQL com Oracle. Operadores
+ Sub-consultas SQL
+ Funções SQL
+ Agrupamento e combinação de elementos com SQL
+ Manipulação de dados com SQL
+ Chaves primárias com SQL com Oracle
+ Definição de chaves para tabelas e restrições
+ Supressão e modificação de tabelas com SQL
+ Gerenciamento de vistas em SQL
+ Usuários em Oracle
+ Gerenciamento em Oracle com SQL
+ Otimizar consultas SQL
+ Consultas de seleção
+ Critérios de seleção em SQL
+ Como exibir informações com múltiplas instruções SQL
+ Critérios de seleção em SQL II
+ Consultas de ação
+ Tipos de dados SQL
+ Subconsultas em SQL
+ Consultas SQL de União Internas
+ Estruturas das tabelas em SQL
+ Cursores em SQL
+ Referências Cruzadas em SQL
+ Introdução a freetext e contains em SQL-Server
+ Acesso ao banco de dados externos
+ Consultas com parâmetros e omissão de permissões
+ Procedures e busca de registros duplicados em SQL
+ A função datepart() em Access
+ Emular um Cursor SQL com um Loop
+ Tipos de instruções SQL e seus componentes sintáticos

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Função em SQL para o cálculo de dias de trabalho

Função que nos permite calcular o número de dias de trabalho entre uma data e outra, com as validações pertinentes.


/*Primeiramente declaramos que vamos criar uma função, neste caso se chama Dif Dias e recebe dois parâmetros, a data inicial do período e a final*/

CREATE FUNCTION DifDias(@StartDate DATETIME,@EndDate DATETIME)
RETURNS integer
AS
Begin

//Com esta variavel calculamos quantos dias "normais" existem na classe de datas

DECLARE @DaysBetween INT

//Com esta variavel acumulamos os dias totais

DECLARE @BusinessDays INT

//esta variavel nos serve de contador para saber quando chegarmos ao ultimo dia da classe

DECLARE @Cnt INT

/*esta variavel eh a que comparamos para saber se o dia que esta calculando eh sabado ou domingo*/

DECLARE @EvalDate DATETIME

/*Estas duas variaveis servem para comparar as duas datas, se sao iguais, a funcao nos regressa um 0*/

DECLARE @ini VARCHAR(10)
DECLARE @fin VARCHAR(10)

//Iniciamos algumas variaveis

SELECT @DaysBetween = 0
SELECT @BusinessDays = 0
SELECT @Cnt=0

//Calculamos quantos dias normais existem na classe de datas

SELECT @DaysBetween = DATEDIFF(DAY,@StartDate,@EndDate) + 1

/*Ordenamos o formato das datas para que não importando como se proporcionem se comparem igual*/

SELECT @ini = (SELECT CAST((CAST(datepart(dd,@StartDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@StartDate)AS
VARCHAR(2))+'/'+CAST(datepart(yy,@StartDate)AS VARCHAR(4))) as
varchar(10)))
SELECT @fin = (SELECT CAST((CAST(datepart(dd,@EndDate)AS
VARCHAR(2))+'/'+ CAST(datepart(mm,@EndDate)AS VARCHAR(2))+'/'+
CAST(datepart(yy,@EndDate)AS VARCHAR(4)))as varchar(10)))

//Comparam-se as duas datas

IF @ini <>@fin
BEGIN

/*Se a diferenca de datas for igual a dois, eh porque so foi transcorrido um dia, portanto somente se valida de que nao vai marcar dias de mais*/

IF @DaysBetween = 2
BEGIN
SELECT @BusinessDays = 1
END
ELSE
BEGIN
WHILE @Cnt < @DaysBetween
BEGIN

/*Iguala-se a data que vamos calcular para saber se eh sabado ou domingo na variavel @EvalDate somando os dias que marque o contador, o qual nao deve ser maior que o numero total de dias que existem na classe de datas*/

SELECT @EvalDate = @StartDate + @Cnt

/*Utilizando a funcao datepart com o parametro dw que calcula que dia da semana corresponde uma data determinada, determinados que nao seja sabado (7) ou domingo (1)*/

IF ((datepart(dw,@EvalDate) <> 1) and
(datepart(dw,@EvalDate) <> 7) )
BEGIN

/*Se nao eh sabado ou domingo, entao se soma um ao total de dias que queremos desdobrar*/

SELECT @BusinessDays = @BusinessDays + 1
END

//Soma-se um dia a mais ao contador

SELECT @Cnt = @Cnt + 1
END
END
END
ELSE
BEGIN

//Se fosse certo que as datas eram iguales se desdobraria em zero

SELECT @BusinessDays = 0
END

//Ao finalizar o ciclo, a funcao regressa o numero total de dias

return (@BusinessDays)
END

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Tutorial de SQL
Seguinte: SQL com Oracle

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em Linguagem SQL


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites