簡體   English   中英

如何從日期列中獲取上個月的最后日期?

[英]How to get from a date column the last date of the previous month?

我有兩個日期列,僅考慮工作日。 A_date 和 E_date。 E_date 的計算方法是在 A_date 上加上 +2 天,因為這是請求

問題是如果 A_date 的日期是當月的 30 日或 31 日,那么 E_date 的日期需要是當月的最后一天,而不是下個月的第一個或第二個工作日。

我試過 eomonth function 但這不起作用,因為它需要一個明確的日期。

你知道如何解決它嗎?

我不確定你的問題是什么。 到目前為止,我所了解的是,您希望當月的最后一個日期在A_Date中添加兩天時跳轉到下個月。

您為什么不使用CASE WHEN並以這種方式比較月份:

DECLARE @A_Date date = '2019/09/30';
DECLARE @A_Date_Month int = 0;
DECLARE @E_Date_Month int = 0;

SELECT @A_Date_Month = Month(Cast(@A_Date AS datetime));
SELECT @E_Date_Month = Month(DATEADD(day, 2, @A_Date));

SELECT CASE 
        WHEN @A_Date_Month = @E_Date_Month 
        THEN DATEADD(day, 2, @A_Date) 
        ELSE EOMONTH(@A_Date) END AS OUTPUTValue

試試上面的設置,如果它解決了你的問題,請告訴我!

如何從日期列中獲取上個月的最后日期?

這取決於您的 RDBMS,所以讓我們借此機會做出一個通用的答案:

在 Oracle 中:

LAST_DAY(ADD_MONTHS(mydate ,-1))

在 MySQL 中:

LAST_DAY(mydate - INTERVAL 1 MONTH)

在 SQL 服務器中:

DATEADD(MONTH, DATEDIFF(MONTH, -1, mydate )-1, -1)
-- or simply:
EOMONTH(DATEADD(Month, -1, mydate ))

在 Postgres 中:

date_trunc('month', now())::mydate - 1
SELECT CASE WHEN dateadd(month,1+datediff(month,0,A_date),-1)< DATEADD(day, 2, A_date) THEN dateadd(month,1+datediff(month,0,A_date),-1) ELSE DATEADD(day, 2, A_date) END E_date

FOR 2019/09/30 output 的輸入是 2019-09-30 00:00:00.000

您可以在 SQLServer 中使用EOMONTH()來獲取該月的最后一天。

例子:

EOMONTH(A_date)

有兩個日期列,僅考慮工作日。 A_date 和 E_date。 E_date 的計算方法是在 A_date 上加上 +2 天,因為這是請求

我會簡單地做:

(case when dateadd(day, 2, a_date) < eomonth(a_date)
      then dateadd(day, 2, a_date)
      else eomonth(a_date)
 end) as e_date

如果您真的只希望在任何給定月份的 30 日或 31 日而不是任何一個月的最后 2 天(因為顯然不是每個月都有 31 天)--

select A_date
   ,case when day(A_date) >= 30
       then eomonth(A_date)
       else dateadd("dd",2,A_date)
    end as E_date

其他答案適用於“任何一個月的最后 2 天”。

暫無
暫無

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

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