Запрос, чтобы проверить дату в Sql - PullRequest
1 голос
/ 17 января 2011

Мой запрос прост, но немного искажен для меня.На самом деле я работаю над модулем регистрации приложения, где регистрация истекает 31 марта каждого года.Регистрация действительна с 1 апреля по 31 марта. Поэтому всякий раз, когда пользователь регистрируется в промежутке между датами, я хочу, чтобы его статус истекал при пересечении 31 марта.

Позвольте мне прояснить для вас.

Допустим, я зарегистрировался в 15 ноября 2010 года, а затем 31 марта 2011 года срок моей подписки истечет.Я хочу проверить это автоматически, поскольку годы будут продолжаться.Мне нужен запрос, который автоматически запросит дату создания с датой истечения срока действия.У меня уже есть запрос на выбор, и мне нужно встроить это условие, и я хочу проверить дату создания с текущей системной датой.Если текущая системная дата не 31 марта, полночь 12, статус должен быть активным, иначе срок действия истек.

Ответы [ 4 ]

1 голос
/ 17 января 2011

Это может использоваться для 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

, например

Where Case When CreateDate < getdate() And 
           Getdate() < Cast(str(DatePart(year, getdate())) + '-03-31' as datetime) Then 
           'Active' Else 'Expired' end  = 'Expired'
1 голос
/ 17 января 2011

Что вам нужно, это запланировать работу (я думаю, что они называются событиями на MySql), чтобы запускаться каждый год 31 марта 11:59 и обновлять, чтобы установить статус всех ваших учетных записей, срок действия которых истек.(не забудьте сделать dstinction на учетных записях администратора) :)

Взгляните на это.

для MySQL

http://dev.mysql.com/tech-resources/articles/mysql-events.html#1

для SqlServer

http://msdn.microsoft.com/en-us/library/ms191439.aspx

http://msdn.microsoft.com/en-us/library/ms190268.aspx

0 голосов
/ 21 января 2011

Вероятно, у меня был бы столбец «последний обновленный» (изначально он будет хранить дату создания), а затем напишите:

SELECT CASE WHEN 
    YEAR(DATEADD(mm, -3, LastRenewed)) < (YEAR(GETDATE()) - 1) 
    THEN 'Active'
    ELSE 'Expired' END 
    AS Status
    FROM TableName

Я не понимаю, в чем проблема с ответом @ Барри, если честно. Если вам нужно использовать эту логику в нескольких местах, вы можете избежать повторения, используя представление, например:

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'
0 голосов
/ 20 января 2011

Я рассматриваю таблицу 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...