DATEDIFFT、EOMONTH 和 DATE 格式
Posted
技术标签:
【中文标题】DATEDIFFT、EOMONTH 和 DATE 格式【英文标题】:DATEDIFFT,EOMONTH and DATE format 【发布时间】:2021-08-27 10:00:25 【问题描述】:应该有什么问题
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 但不起作用
【问题讨论】:
DAY(EOMONTH('2019-05' + '-01'))
应该可以工作。对于第一部分,告诉我们 date_s 和 date_e 是什么样的。
他们看起来像 2029-10-19 它是日期类型
SUM(DATEDIFF(...
应该会按预期工作。
据我所知,我得到了一个恶魔!
@iman 。 . .用您正在使用的数据库标记您的问题。
【参考方案1】:
我认为这是关于我昨天在问题 whole absent month-SQL DBMS 上给出的答案的问题。为了连续性,您应该评论答案。
你问有什么问题:
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))
,因为它是获取一个月中天数的最简单方法 - 找到该月的最后一天,然后获取它的日期,即一个月的天数。
如果答案解决了您的问题,请将答案标记为已接受,如果您需要更多说明,请对答案发表评论。
【讨论】:
exakt - 这是关于你的回答,感谢你给我新的信息 @iman 很高兴为您提供新信息,您的问题是什么?上面的答案中有新信息。 这就是我的意思。你昨天和今天的回答给我新的信息谢谢 @iman 抱歉,我误会了你……希望这对你的查询有所帮助,祝你好运! @Tick_Tack 我不使用 DB2,但快速的 Google 搜索显示有一个 LAST_DAY 函数应该可以代替 EOMONTH ibm.com/docs/ko/db2-for-zos/12?topic=functions-last-day 和一个 DAYS 函数而不是 DATEDIFF ibm.com/docs/en/db2-for-zos/11?topic=functions-days 抱歉我不能帮助你更多,我没有任何地方的 DB2 服务器可以尝试一下以上是关于DATEDIFFT、EOMONTH 和 DATE 格式的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server ->> 时间函数: EOMONTH, DATEFROMPARTS, TIMEFROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETF