DATEDIFT、EOMONTH 和 DATE 格式
DATEDIFFT,EOMONTH and DATE format
应该有什么问题
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 但不起作用
我认为这是一个关于我昨天对 whole absent month-SQL DBMS 问题的回答的问题。为了连续性,您应该对答案发表评论。
你问应该是什么问题:
SUM(DATEDIFF(DAY, DATE_S, DATE_E) + 1)
你提到 DATE_E
可能是 NULL
。这部分查询是针对 ABSENT
table。如果您不结束员工的缺勤,那么您应该怎么办?您可以添加一个 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))
,因为这是获取一个月中天数的最简单方法 - 找到该月的最后一天,然后获取当天对它来说,就是这个月的天数。
如果答案解决了您的问题,请将其标记为已接受;如果您需要更多说明,请对答案发表评论。
应该有什么问题
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 但不起作用
我认为这是一个关于我昨天对 whole absent month-SQL DBMS 问题的回答的问题。为了连续性,您应该对答案发表评论。
你问应该是什么问题:
SUM(DATEDIFF(DAY, DATE_S, DATE_E) + 1)
你提到 DATE_E
可能是 NULL
。这部分查询是针对 ABSENT
table。如果您不结束员工的缺勤,那么您应该怎么办?您可以添加一个 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))
,因为这是获取一个月中天数的最简单方法 - 找到该月的最后一天,然后获取当天对它来说,就是这个月的天数。
如果答案解决了您的问题,请将其标记为已接受;如果您需要更多说明,请对答案发表评论。