IF OBJECT_ID('TEMPDB..#TBCONTRATO') IS NOT NULL
DROP TABLE #TBCONTRATO
GO
CREATE TABLE #TBCONTRATO
(
TBCONTRATOID INT NULL,
TBCLIENTEID INT NULL,
DIAVENCIMENTOMENSALIDADE INT NULL,
VALORMENSALIDADE DECIMAL(18,2) NULL
)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (342,453, 1, 3444.99)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (123,283, 1, 2000.99)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (655,983, 1, 1500.00)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (335,476, 5, 6780.00)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (552,442, 5, 8990.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (655,223, 5, 2340.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (255,253, 10, 12340.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (633,423, 10, 22340.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (455,723, 10, 23540.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (265,254, 15, 12340.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (673,923, 15, 22340.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (955,733, 15, 23540.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (755,623, 31, 540.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (485,523, 31, 230.10)
INSERT INTO #TBCONTRATO (TBCONTRATOID, TBCLIENTEID, DIAVENCIMENTOMENSALIDADE, VALORMENSALIDADE) VALUES (495,739, 31, 250.10)
-----------------------------------------------------------------------------
-- SUPONHAMOS QUE SUA DATA DE VEREFICAÇÃO SEJA
DECLARE @DATE DATE = GETDATE(); --<<= VOCE PODE ALTERAR PARA TESTE
DECLARE @LASTDAY DATETIME = DATEADD(DAY, -1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) + 1 AS VARCHAR) + '/01' AS DATE));
-- CRIA TABELA TEMPORARIA
DECLARE @TBTEMP TABLE
(
TBCONTRATOID INT NULL,
TBCLIENTEID INT NULL,
VALORMENSALIDADE DECIMAL(18,2) NULL,
DIA INT NULL,
VENCIMENTO DATE
)
-----------------------------------------------------------------------------
SET @DATE = DATEADD(MONTH, -1, @DATE);
SET @LASTDAY = DATEADD(DAY, -1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) AS VARCHAR) + '/01' AS DATE));
INSERT @TBTEMP
SELECT
TBCONTRATOID,
TBCLIENTEID,
VALORMENSALIDADE,
DIAVENCIMENTOMENSALIDADE,
DATEADD(DAY, DIAVENCIMENTOMENSALIDADE - 1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) AS VARCHAR) + '/01' AS DATE)) AS VENCIMENTO
FROM
#TBCONTRATO
-- AJUSTA AS DATAS PARA O ULTIMO DIA CASO O MES NÃO CONTENHA A DATA
UPDATE @TBTEMP SET VENCIMENTO = @LASTDAY WHERE DAY(VENCIMENTO) != DIA
-----------------------------------------------------------------------------
SET @DATE = DATEADD(MONTH, 1, @DATE);
SET @LASTDAY = DATEADD(DAY, -1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) + 1 AS VARCHAR) + '/01' AS DATE));
INSERT @TBTEMP
SELECT
TBCONTRATOID,
TBCLIENTEID,
VALORMENSALIDADE,
DIAVENCIMENTOMENSALIDADE,
DATEADD(DAY, DIAVENCIMENTOMENSALIDADE - 1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) AS VARCHAR) + '/01' AS DATE)) AS VENCIMENTO
FROM
#TBCONTRATO
-- AJUSTA AS DATAS PARA O ULTIMO DIA CASO O MES NÃO CONTENHA A DATA
UPDATE @TBTEMP SET VENCIMENTO = @LASTDAY WHERE DAY(VENCIMENTO) != DIA
-----------------------------------------------------------------------------
SET @DATE = DATEADD(MONTH, 1, @DATE);
SET @LASTDAY = DATEADD(DAY, -1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) + 1 AS VARCHAR) + '/01' AS DATE));
INSERT @TBTEMP
SELECT
TBCONTRATOID,
TBCLIENTEID,
VALORMENSALIDADE,
DIAVENCIMENTOMENSALIDADE,
DATEADD(DAY, DIAVENCIMENTOMENSALIDADE - 1, CAST(CAST(YEAR(@DATE) AS VARCHAR) + '/' + CAST(MONTH(@DATE) AS VARCHAR) + '/01' AS DATE)) AS VENCIMENTO
FROM
#TBCONTRATO
-- AJUSTA AS DATAS PARA O ULTIMO DIA CASO O MES NÃO CONTENHA A DATA
UPDATE @TBTEMP SET VENCIMENTO = @LASTDAY WHERE DAY(VENCIMENTO) != DIA
-----------------------------------------------------------------------------
-- AJUSTA A DATA
SET @DATE = DATEADD(MONTH, -1, @DATE);
-----------------------------------------------------------------------------
-- 10 E 2 DIAS ANTES DO DIA DE VENCIMENTO
SELECT
*
FROM
@TBTEMP
WHERE
@DATE = DATEADD(DAY, -10, VENCIMENTO)
OR @DATE = DATEADD(DAY, -2, VENCIMENTO)
-----------------------------------------------------------------------------
-- 2, 5 E 10 DIAS DEPOIS DO DIA DE VENCIMENTO
SELECT
*
FROM
@TBTEMP
WHERE
@DATE = DATEADD(DAY, 2, VENCIMENTO)
OR @DATE = DATEADD(DAY, 5, VENCIMENTO)
OR @DATE = DATEADD(DAY, 10, VENCIMENTO)