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