我確定有人已經開發出了在其他編程語言中模擬Excel網絡日功能的工作。如果你可以分享的話,你可以選擇 。 感謝在sql中模擬Excel networkdays
1
A
回答
1
一個SQL解決方案爲每SO質疑"Equivalent of Excel’s NETWORKDAYS function with Jet ADO"
3
的想法是計算每個日期的星期然後採用各種偏移的開始之間的工作日。
- 每個日期前找到週六之間的天數
- 除以7乘以5得到的工作日數
- 偏移總的起始日期是否是結尾日期 後
- 再次偏移量開始是否結束後開始是星期六
- 再次爲啓動是否是後到底是星期天
- 再次爲啓動以後是否不和開始是一個星期天
- 爲再次啓動後,是否不和,到底是週六
添加一些隨機的日期到表中。
declare @t table ([start] datetime, [end] datetime)
insert into @t values ('2088-01-14 11:56:23','2011-11-10 03:34:09')
insert into @t values ('2024-09-24 10:14:29','2087-09-16 15:52:06')
然後爲這些日期計算NETWORKDAYS。
select [start],[end]
,((datediff(day,0,[end])-datepart(dw,[end]))-(datediff(day,0,[start])-datepart(dw,[start])))/7*5 --[weekdays]
+ datepart(dw,[end]) - datepart(dw,[start]) --[weekday diff]
+ case when datediff(day,0,[start]) > datediff(day,0,[end]) then -1 else 1 end --[start after]
+ case when datediff(day,0,[start]) > datediff(day,0,[end]) and datepart(dw,[start]) = 7 then 1 else 0 end --[start after and start saturday]
+ case when datediff(day,0,[start]) > datediff(day,0,[end]) and datepart(dw,[end]) = 1 then 1 else 0 end --[start after and end sunday]
+ case when datediff(day,0,[start]) <= datediff(day,0,[end]) and datepart(dw,[start]) = 1 then -1 else 0 end --[start not after and start sunday]
+ case when datediff(day,0,[start]) <= datediff(day,0,[end]) and datepart(dw,[end]) = 7 then -1 else 0 end --[start not after and end saturday]
as [networkdays]
from @t
+2
歡迎來到Stack Overflow!在答案中提供至少一個簡短的解釋和代碼是一個好主意。 – Techwolf 2012-11-08 06:32:03
0
對於它的價值,我創建了以下功能的MySQL,它假定週一至週五的工作日:
DROP FUNCTION IF EXISTS BusinessDays;
DELIMITER //
CREATE FUNCTION BusinessDays (startDate DATE, endDate DATE)
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE startWeekDay INT;
DECLARE allDays INT;
DECLARE fullWeekCount INT;
DECLARE remainderDays INT;
DECLARE maxPossibleRemainderWeekendDays INT;
DECLARE soloSundays INT;
DECLARE totalBusinessDays INT;
SET startWeekDay = WEEKDAY(startDate);
SET allDays = ABS(DATEDIFF(endDate, startDate)) + 1;
SET fullWeekCount = FLOOR(allDays/7);
SET remainderDays = allDays - (fullWeekCount * 7);
SET maxPossibleRemainderWeekendDays = ROUND(2*(startWeekDay+remainderDays-6)/(ABS(2*(startWeekDay+remainderDays-6))+1))+1;
SET soloSundays = ROUND(2*(startWeekDay-6)/(ABS(2*(startWeekDay-6))+1))+1;
SET totalBusinessDays = allDays - (fullWeekCount * 2) - maxPossibleRemainderWeekendDays + soloSundays;
RETURN totalBusinessDays;
END //
DELIMITER ;
相關問題
- 1. 使用NETWORKDAYS的Excel VBA
- 2. 在Excel中是否存在與.NETWORKDAYS等效的.NET方法?
- 3. 在JavaScript中模擬SQL LIKE
- 4. 在C中模擬Excel的YearFrac#
- 5. 在.net中模擬Excel Web查詢
- 6. 使用概率在Excel中模擬
- 7. 在SQL中模擬EXISTS的行爲
- 8. SQL - 模擬器SYSTEM_USER
- 9. 我需要一個函數,它與Excel中的NETWORKDAYS相反或相反
- 10. C#使用T-Sql組模擬Excel數據透視圖功能
- 11. org.powermock.reflect.exceptions.MethodNotFoundException: - 當模擬java sql類
- 12. 如何模擬sql連接?
- 13. SQL CE顯示列模擬?
- 14. Oracle REGEXP_SUBSTR的SQL Server模擬
- 15. Django的模擬SQL「INNER DJOIN」
- 16. 的PhoneGap 2.0 SQL SELECT在ipad模擬器
- 17. 模擬SQL中的內部對象
- 18. 模擬Python中的SQL Server連接器?
- 19. 在Excel中使用vba模擬粘貼操作
- 20. Excel-VBA,樹模擬2變量
- 21. 模擬從Sharepoint檢索Excel文件
- 22. 轉換Excel公式到SQL查詢
- 23. 模擬SQL Server中Oracle的CONNECT BY PRIOR ...在子查詢中
- 24. 在iPhone模擬器中模擬飛行模式
- 25. Android模擬器在模擬器中變得模糊
- 26. 在Android模擬器中可以模擬未命中嗎?
- 27. Excel Sql拋出SQL運行在Excel只讀模式時太多參數錯誤
- 28. 在iPad模擬器上模擬擠壓
- 29. 在android模擬器上模擬GPS
- 30. 如何模擬在iPhone模擬器
[MySQL的函數的可能的複製找到工作日內兩個日期之間的數](http://stackoverflow.com/questions/1828948/mysql-function-to-find-the-number-of-working-days-between-two-dates) – 2017-04-21 18:48:51