[英]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.