Member 12876051 Ответов: 1

Изменить код истечения срока действия членства в таблице SQL


Привет

У меня есть запрограммированная таблица в SQL, которую мне нужно изменить, чтобы она использовала текущую дату запроса, а затем истекала ровно через год. В настоящее время мой код использует правило off usign a date format до 15 числа каждого месяца, и когда мы регистрируемся в нашей системе, он либо дает членскому номеру срок действия 13 месяцев, а не 12. Мне нужно изменить код belwo, и я новичок в SQL, не могли бы вы помочь, пожалуйста


/****** Object:  StoredProcedure [dbo].[CP_Create_Card]    Script Date: 2016-11-29 08:41:26 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<author,,name>
-- Create date: <create date,,="">
-- Description:	<description,,>
-- =============================================
ALTER PROCEDURE [dbo].[CP_Create_Card] 
	-- Add the parameters for the stored procedure here
 @membershipNumber VARCHAR(MAX),
 @CardId BIGINT = NULL OUTPUT,
 @minsToFirstDeadline int = 2880,--defailt 2 days
 @minsToSecondDeadline int = 5760 --default 4 days

	
AS
BEGIN
	DECLARE @CreatedDate DATETIME = GETDATE()
	DECLARE @ExpiryDate DATETIME
	DECLARE @FirstDeadine DATETIME
	DECLARE @SecondDeadline DATETIME
	IF DAY(@CreatedDate) < 15
	BEGIN
		SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @CreatedDate) + 1, 0)))
	END
	ELSE
	BEGIN
		SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @CreatedDate) + 2, 0)))
	END


	SELECT @FirstDeadine = DATEADD(MINUTE,@minsToFirstDeadline,GETDATE())
	SELECT @SecondDeadline = DATEADD(MINUTE,@minsToSecondDeadline,GETDATE())
	--Create Card Linked to Membership below
	IF EXISTS(SELECT * FROM Cards WHERE MembershipNumber = @membershipNumber AND Enabled = 1)
	BEGIN
		UPDATE Cards SET Enabled = 0 WHERE MembershipNumber = @membershipNumber AND Enabled = 1
	END

	INSERT INTO Cards (CardStatusId, MembershipNumber, PrintedDate, Created, Modified, ExpiryDate,FirstDeadline,SecondDeadline, Enabled) 
	VALUES(1, @membershipNumber, @CreatedDate, @CreatedDate, @CreatedDate, @ExpiryDate,@FirstDeadine,@SecondDeadline, 1)	
	SET @CardId = SCOPE_IDENTITY()

			-- Return Card Id

	
END


Что я уже пробовал:

Не знаю как изменить раздел

Если день (@CreatedDate) < 15
НАЧАТЬ
Выберите @ExpiryDate = функция dateadd(год, 1, функция dateadd(д, -1, функция dateadd(M, то функция datediff(М, 0, @CreatedDate) + 1, 0)))
КОНЕЦ
ЕЩЁ
НАЧАТЬ
Выберите @ExpiryDate = функция dateadd(год, 1, функция dateadd(д, -1, функция dateadd(M, то функция datediff(М, 0, @CreatedDate) + 2, 0)))
КОНЕЦ

1 Ответов

Рейтинг:
0

NightWizzard

Чтобы уменьшить результат на 1 месяц просто используйте:

IF DAY(@CreatedDate) < 15
BEGIN
SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @CreatedDate), 0)))
END
ELSE
BEGIN
SELECT @ExpiryDate = DATEADD(YEAR, 1, DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @CreatedDate) + 1, 0)))
END