我有两个日期列,仅考虑工作日。 A_date和E_date。 计算出的E_date是A_date的+2天,因为这是请求
问题是,如果A_date的日期是该月的30号或31号,则E_date日期必须是当月的最后一天,而不是下个月的第一个或第二个工作日。
我已经尝试了eomonth函数,但是该方法不起作用,因为它需要一个明确的日期。
您知道如何解决吗?
答案 0 :(得分:1)
我不确定您的问题是什么。到目前为止,我所了解的是,如果要向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
尝试以上设置,并让我知道它是否可以解决您的问题!
答案 1 :(得分:0)
如何从日期列中获取上个月的最后日期?
这取决于您的RDBMS,所以让我们借此机会做出一个通用的答案:
在Oracle中:
LAST_DAY(ADD_MONTHS(mydate ,-1))
在MySQL中:
LAST_DAY(mydate - INTERVAL 1 MONTH)
在SQL Server中:
DATEADD(MONTH, DATEDIFF(MONTH, -1, mydate )-1, -1)
-- or simply:
EOMONTH(DATEADD(Month, -1, mydate ))
在Postgres中:
date_trunc('month', now())::mydate - 1
答案 2 :(得分:0)
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
2019/09/30输出的FOR输入是2019-09-30 00:00:00.000
答案 3 :(得分:0)
您可以在SQLServer中使用 EOMONTH()来获取每月的最后一天。
示例:
EOMONTH(A_date)
答案 4 :(得分:0)
有两个日期列,仅考虑工作日。 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
答案 5 :(得分:0)
如果您真正只想在给定月份的30号或31号而不是每个月的最后2天这样做(因为显然不是每个月都有31天)-
import {UpdatingElement, customElement} from 'lit-element';
import content from './someContent.html';
@customElement('some-element')
export class SomeElement extends UpdatingElement {
constructor() {
super();
this.shadowRoot.innerHTML = content;
}
}
其他答案适用于“每月的最后2天”。