none
Como colocar data em um dia útil RRS feed

  • Pergunta

  • Boa tarde a todos,

    Estou criando uma query que tem as seguintes informações básicas:

    PEDIDO | DATA EMISSAO | DURACAO_FABR | PREVISAO_ENTREGA

    045455 | 20130701        |     6           |       20130706

    Porém a PREVISAO_ENTREGA esta dando num sábado, eu preciso que ele verifique, caso a PREVISAO_ENTREGA seja num sábado ou domingo ele altere para o próximo dia útil.

    Sabem me dizer se isso é possível?

    Desde já agradeço a ajuda.

    sexta-feira, 12 de julho de 2013 16:53

Respostas

  • Gilberto,

    Em relação a dia util será necessario uma tabela com feriados e afins, todo caso, segue abaixo uma codificação em relação a sabado e domingo utili uma trigger instead of.

    --Db Change
    USE master
    GO
    
    --Criação da tabela
    IF(OBJECT_ID('TabelaDiaUtil') IS NOT NULL)
    	DROP TABLE TabelaDiaUtil
    GO
    
    CREATE TABLE TabelaDiaUtil
    (
    	Pedido	VARCHAR(10),
    	Data_Emissao	DATETIME,
    	Duracao_Fabr	INT,
    	Previsao_Entrega	DATETIME
    )
    GO
    
    --Criação da procedure
    CREATE TRIGGER dbo.InsertTabelaDiaUtil
    ON TabelaDiaUtil
    INSTEAD OF INSERT
    AS
    	IF((SELECT DATEPART(WEEKDAY, Previsao_Entrega) FROM Inserted) = 7 /*ADICIONAR AQUI TABELA DE FERIADOS*/)-- Sabado
    	BEGIN
    		INSERT INTO TabelaDiaUtil
    		SELECT Pedido, Data_Emissao, Duracao_Fabr, DATEADD(DAY, 2, Previsao_Entrega)
    		FROM Inserted
    	END
    	IF((SELECT DATEPART(WEEKDAY, Previsao_Entrega) FROM Inserted) = 1 /*ADICIONAR AQUI TABELA DE FERIADOS*/)-- Domingo
    	BEGIN
    		INSERT INTO TabelaDiaUtil
    		SELECT Pedido, Data_Emissao, Duracao_Fabr, DATEADD(DAY, 1, Previsao_Entrega)
    		FROM Inserted
    	END
    	IF((SELECT DATEPART(WEEKDAY, Previsao_Entrega) FROM Inserted) IN (2, 3, 4, 5, 6))-- Outros dias
    	BEGIN
    		INSERT INTO TabelaDiaUtil
    		SELECT Pedido, Data_Emissao, Duracao_Fabr, Previsao_Entrega
    		FROM Inserted
    	END
    GO
    
    --Teste data insert
    INSERT INTO TabelaDiaUtil VALUES
    ('045455', '20130701', 4, DATEADD(DAY, 4, '20130701'))
    
    SELECT * FROM TabelaDiaUtil
    /*
    Pedido	Data_Emissao				Duracao_Fabr	Previsao_Entrega
    045455	2013-07-01 00:00:00.000		4				2013-07-05 00:00:00.000
    */
    
    INSERT INTO TabelaDiaUtil VALUES
    ('045455', '20130701', 5, DATEADD(DAY, 5, '20130701'))
    
    SELECT * FROM TabelaDiaUtil
    /*
    Pedido	Data_Emissao				Duracao_Fabr	Previsao_Entrega
    045455	2013-07-01 00:00:00.000		4				2013-07-05 00:00:00.000
    045455	2013-07-01 00:00:00.000		5				2013-07-08 00:00:00.000
    */
    
    INSERT INTO TabelaDiaUtil VALUES
    ('045455', '20130701', 6, DATEADD(DAY, 6, '20130701'))
    
    SELECT * FROM TabelaDiaUtil
    /*
    Pedido	Data_Emissao				Duracao_Fabr	Previsao_Entrega
    045455	2013-07-01 00:00:00.000		4				2013-07-05 00:00:00.000
    045455	2013-07-01 00:00:00.000		5				2013-07-08 00:00:00.000
    045455	2013-07-01 00:00:00.000		6				2013-07-08 00:00:00.000
    */


    Fabrizzio A. Caputo
    Certificações:
    MCT
    MCC
    Oracle OCA 11g
    MCTS SQL Server 2008 BI
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta GilbertoFSilva terça-feira, 22 de março de 2016 18:33
    sexta-feira, 12 de julho de 2013 17:14
    Moderador