簡體   English   中英

SQL檢查日期是否比上個月晚N天

[英]SQL check if date is N days back from last month

我需要根據dateIssued檢查發票的編輯(在表格中可以說發票)。

(SQL Server 2008 R2)

想法是可以更改上個月的發票數據,直到本月的第N天為止。 之后,只能更改當月的發票。 發票不能在2個月內更改,以此類推。

例。 假設N = 20天

這意味着我可以將11月的發票更改為12月20日。 在12月21日,我只能更改12月的發票。

我希望我能描述得足夠:(

SELECT invoiceNo, dateIssued FROM Invoices;

invoiceNo dateIssued
001       2016-10-30 00:00:00.000
002       2016-12-01 00:00:00.000
003       2016-11-03 00:00:00.000
004       2016-11-24 00:00:00.000
005       2016-09-09 00:00:00.000

我無法建立一種優雅的算法,可以根據系統日期從表中選擇可編輯的發票。

謝謝

如果您想獲取今天可以修改的發票,則如下所示:

select i.*
from invoices i
where year(dateissued) * 12 + month(dateissued) = year(getdate()) * 12 + month(getdate()) or
      (day(getdate()) <= @n and
       year(dateissued) * 12 + month(dateissued) = year(getdate()) * 12 + month(getdate()) - 1
      ) ;

使用year * 12 + month的時髦表達僅是從時間零開始的月份數。 這對於獲取當前日期和上個月非常方便。

DECLARE @Invoices AS TABLE (InvoiceNo INT, dateIssues DATETIME)
INSERT INTO @Invoices VALUES
(1,'2016-10-30 00:00:00.000')
,(2,'2016-12-01 00:00:00.000')
,(3,'2016-11-03 00:00:00.000')
,(4,'2016-11-24 00:00:00.000')
,(5,'2016-09-09 00:00:00.000')

DECLARE @N INT = 20

SELECT
    *
FROM
    @Invoices
WHERE
    dateIssues >=
    CASE WHEN DAY(GETDATE()) < @N
       THEN DATEADD(MONTH,-1,DATEADD(DAY,1 - DAY(GETDATE()),CAST(GETDATE() AS DATE))) --beginning of last month
       ELSE DATEADD(DAY,1 - DAY(GETDATE()),CAST(GETDATE() AS DATE))  --beginning of this month
    END
DECLARE @LastDayForEditingPreviousMonth INT = 20

-- Return only invoices for the current month, of those for last month if the @LastDayForEditingPreviousMonth day has not been passed
SELECT *
FROM invoices
WHERE (     DATEPART(YEAR,dateissued) = DATEPART(YEAR,GETDATE()) 
        AND DATEPART(MONTH,dateissued) = DATEPART(MONTH,GETDATE())
      ) -- Invoices for this month
OR (    DATEPART(DAY,GETDATE()) <= @LastDayForEditingPreviousMonth
    AND DATEPART(YEAR,dateissued) = DATEPART(YEAR,GETDATE())
    AND DATEPART(MONTH,dateissued) = DATEPART(MONTH,GETDATE()) - 1
) -- Invoices from last month (if eligible)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM