我的查询简单但有点扭曲。实际上我正在开发应用程序的注册模块,注册表每年3月31日到期。注册有效期为4月1日至3月31日。因此,只要用户在该日期之间进行了注册,我希望如果超过3月31日,他的状态将会过期。
让我向你说清楚。
说我已经在15Nov2010注册了自己,然后在2011年3月31日,我的订阅将过期。随着岁月的流逝,我想自动检查它。我需要一个查询,它将自动查询创建日期和截止日期。我已经有一个选择查询,我需要嵌入这个条件,我想检查创建日期与当前系统日期。如果当前系统日期不是3月31日午夜12,则状态必须处于活动状态,否则将过期。
答案 0 :(得分:1)
您需要的是安排一份工作(我认为他们被称为MySql上的事件)每年3月31日11:59运行,并且更新将您所有帐户的状态设置为已过期。 (记得在管理员帐户上制作dstinction):)
看看这个。
for MySQL
http://dev.mysql.com/tech-resources/articles/mysql-events.html#1
用于SqlServer
答案 1 :(得分:1)
这可以用于MS SQL以确定它是否已过期。
create table #t
(
CreateDate datetime
)
Insert Into #t
select GETDATE() union all
Select DateAdd(month,4, getdate())
Select Case When CreateDate < getdate() And
Getdate() < Cast(str(DatePart(year, getdate())) + '-03-31' as datetime) Then
'Active' Else 'Expired' end as [Status],
CreateDate
From #t
drop table #t
要过滤查询,只需将case语句移动到where子句
即可e.g。
Where Case When CreateDate < getdate() And
Getdate() < Cast(str(DatePart(year, getdate())) + '-03-31' as datetime) Then
'Active' Else 'Expired' end = 'Expired'
答案 2 :(得分:0)
我正在考虑一个表YourTable
,它有Date
类型的datetime
列
您可以使用此查询 -
select [Date], dbo.GetStatus([Date]) as 'status' from YourTable
并且,函数GetStatus -
CREATE FUNCTION [dbo].[GetStatus](@Date datetime)
RETURNS varchar(10)
AS
BEGIN
DECLARE @Return varchar(10)
DECLARE @Year int
SELECT @Year = DATEPART(YYYY,GETDATE())
IF GETDATE() >= CONVERT(datetime,'01-APR-' + CONVERT(varchar,@Year))
SET @Year = @Year + 1
IF @Date BETWEEN CONVERT(datetime,'01-APR-' + CONVERT(varchar,@Year-1)) AND CONVERT(datetime,'31-MAR-' + CONVERT(varchar,@Year))
set @return = 'active'
ELSE
set @return = 'inactive'
Return @return
END;
答案 3 :(得分:0)
我可能有一个“最后续订”栏目(它最初将存储创建日期)然后写:
SELECT CASE WHEN
YEAR(DATEADD(mm, -3, LastRenewed)) < (YEAR(GETDATE()) - 1)
THEN 'Active'
ELSE 'Expired' END
AS Status
FROM TableName
但是,老实说,我不知道@ Barry的回答是什么问题。如果您需要在多个地方使用此逻辑,则可以避免使用视图重复自己,例如:
CREATE VIEW ActiveOrNot AS
SELECT Account, CASE WHEN
YEAR(DATEADD(mm, -3, LastRenewed)) < (YEAR(GETDATE()) - 1)
THEN 'Active'
ELSE 'Expired' END
AS Status
FROM TableName
然后,您可以使用以下方式选择有效帐户:
SELECT Account
FROM ActiveOrNot
WHERE Status = 'Active'