计算成员资格即将到期的所有用户的存储过程
Stored procedure that counts all users where their membership is about to expire
我有一个存储过程需要统计所有会员资格即将到期的用户,规则是会员资格在订阅一年后到期,所以我想统计所有会员资格到期日期已到的用户当前日期,但我需要计算他们的到期日期至少比当前日期早一个月的用户。
我正在使用 SQL 服务器。
我的存储过程是这样的:
ALTER PROCEDURE [dbo].[gp_get_cpd_membership_reaching_expiration]
-- Add the parameters for the stored procedure here
AS
--EXEC [gp_get_cpd_membership_reaching_expiration]
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE DATEDIFF(day, GETDATE(), a.membership_expiry_date) <= 60
END
感谢任何帮助。
提前致谢。
如果您想基于 12 个月前到 11 个月前创建的用户(因此成为会员的时间在 11 到 12 个月之间),它是
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE a.date_created BETWEEN DATEADD(month, -12, getdate()) AND DATEADD(month, -11, getdate())
如果它基于创建时正确设置的到期日期列,则它是
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE a.membership_expiry_date BETWEEN getdate() AND DATEADD(month, 1, getdate())
始终设法避免在 where 子句中操作 table 数据(不要在 where 子句中对 table 数据调用函数)
BETWEEN 中有一件小事需要提及,它包括结束日期。如果这对您来说是个问题(例如,如果您的日期以天为单位,并且您发现查询是 运行 BETWEEN '2021-01-01' and '2021-02-01'
并且因此包括您不想要的二月日期,您可以换成一个表格像 a.membership_expiry_date >= getdate() AND a.membership_expiry_date < DATEADD(month, 1, getdate())
使用小于.. 或者你可以在你的结束日期回来一秒钟,比如 a.membership_expiry_date BETWEEN getdate() AND DATEADD(second, -1, DATEADD(month, 1, getdate()))
- 如果你的时间是 datetime2 并且有毫秒,当然不要这样做
我有一个存储过程需要统计所有会员资格即将到期的用户,规则是会员资格在订阅一年后到期,所以我想统计所有会员资格到期日期已到的用户当前日期,但我需要计算他们的到期日期至少比当前日期早一个月的用户。
我正在使用 SQL 服务器。
我的存储过程是这样的:
ALTER PROCEDURE [dbo].[gp_get_cpd_membership_reaching_expiration]
-- Add the parameters for the stored procedure here
AS
--EXEC [gp_get_cpd_membership_reaching_expiration]
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE DATEDIFF(day, GETDATE(), a.membership_expiry_date) <= 60
END
感谢任何帮助。
提前致谢。
如果您想基于 12 个月前到 11 个月前创建的用户(因此成为会员的时间在 11 到 12 个月之间),它是
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE a.date_created BETWEEN DATEADD(month, -12, getdate()) AND DATEADD(month, -11, getdate())
如果它基于创建时正确设置的到期日期列,则它是
SELECT COUNT(a.userId) AS MembershipAlmostExpiredUsers
FROM cpd_services_bureau a
WHERE a.membership_expiry_date BETWEEN getdate() AND DATEADD(month, 1, getdate())
始终设法避免在 where 子句中操作 table 数据(不要在 where 子句中对 table 数据调用函数)
BETWEEN 中有一件小事需要提及,它包括结束日期。如果这对您来说是个问题(例如,如果您的日期以天为单位,并且您发现查询是 运行 BETWEEN '2021-01-01' and '2021-02-01'
并且因此包括您不想要的二月日期,您可以换成一个表格像 a.membership_expiry_date >= getdate() AND a.membership_expiry_date < DATEADD(month, 1, getdate())
使用小于.. 或者你可以在你的结束日期回来一秒钟,比如 a.membership_expiry_date BETWEEN getdate() AND DATEADD(second, -1, DATEADD(month, 1, getdate()))
- 如果你的时间是 datetime2 并且有毫秒,当然不要这样做