db2 DATEDIFFT、EOMONTH和日期格式

jbose2ul  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(244)

什么是错的

SUM(DATEDIFF(DAY, DATE_S, DATE_E) + 1)   
DATE_S and  DATE_E are DATE TYPE  and maybe DATE_E IS NULL

第二个问题是我怎样才能在我写作的那个月的最后一天拿到奖金。

DAY(EOMONTH(DATE_S))

DATE_S ='2019 -05'我如何修复它我尝试了concat,但它不工作

xxe27gdn

xxe27gdn1#

我想这是一个关于我昨天对"整个月缺席-SQL数据库管理系统“问题的回答的问题。为了连贯起见,你应该对这个答案发表评论。
你问应该错在哪里:

SUM(DATEDIFF(DAY, DATE_S, DATE_E) + 1)

您提到DATE_E可能是NULL。这部分查询是针对ABSENT表的。如果您不知道某个雇员的缺勤结束日期,那么您应该怎么做?您可以添加一个WHERE子句,并忽略具有缺勤结束日期的雇员(可能是因为他们还没有返回工作岗位),或者您可以将其默认为今天,或者您可以执行您认为适当的其他操作。
若要忽略这些值:

SELECT PER_ID, SUM(DATEDIFF(DAY, DATE_S, DATE_E) + 1) AS [DAYS_ABSENT], 
MONTH(DATE_S) AS [MONTH], YEAR(DATE_S) AS [YEAR]
FROM #ABSENT 
WHERE DATE_E IS NOT NULL
GROUP BY PER_ID, MONTH(DATE_S), YEAR(DATE_S);

要默认为今天:

SELECT PER_ID, SUM(DATEDIFF(DAY, DATE_S, COALESCE(DATE_E, GETDATE())) + 1) AS [DAYS_ABSENT], 
MONTH(DATE_S) AS [MONTH], YEAR(DATE_S) AS [YEAR]
FROM #ABSENT 
GROUP BY PER_ID, MONTH(DATE_S), YEAR(DATE_S);

最后,要获取该月的最后一天,只需

EOMONTH(DATE_S)

如果DATE_S的值实际上类似于2019-05,那么它一定不是DATE(因为它不是有效的DATE),而是某种类型的文本。我们知道一个月中总会有一天是第一天,所以你可以这样做:

DECLARE @data VARCHAR(10) = '2019-05';
SELECT EOMONTH(CONCAT(@data, '-01')) AS [LastDayOfMonth];

在对whole absent month-SQL DBMS的回答中,我使用了DAY(EOMONTH(DATE_S)),因为这是获取一个月中天数的最简单方法--找到该月的最后一天,然后获取该天,即该月的天数。
如果答案解决了您的问题,请将其标记为已接受,如果您需要更多说明,请对答案进行评论。

相关问题