如何用簡單的 SQL 技巧取得特定日期是否為週末假日
select DATEDIFF(DAY, '17530101', '2009-01-19') % 7 / 5 -- 0 select DATEDIFF(DAY, '17530101', '2009-01-20') % 7 / 5 -- 0 select DATEDIFF(DAY, '17530101', '2009-01-21') % 7 / 5 -- 0 select DATEDIFF(DAY, '17530101', '2009-01-22') % 7 / 5 -- 0 select DATEDIFF(DAY, '17530101', '2009-01-23') % 7 / 5 -- 0 select DATEDIFF(DAY, '17530101', '2009-01-24') % 7 / 5 -- 1 select DATEDIFF(DAY, '17530101', '2009-01-25') % 7 / 5 -- 1 select DATEDIFF(DAY, '17530101', tb.CreationOn) % 7 / 5 FROM tb;
select datepart(weekday,'2009-01-19')%6 -- 2
select datepart(weekday,'2009-01-20')%6 -- 3
select datepart(weekday,'2009-01-21')%6 -- 4
select datepart(weekday,'2009-01-22')%6 -- 5
select datepart(weekday,'2009-01-23')%6 -- 0
select datepart(weekday,'2009-01-24')%6 -- 1
select datepart(weekday,'2009-01-25')%6 -- 1
對於想在程式中單純的判斷「假日」與「非假日」就無法得到 0 與 1 的效果,因為在 SQL Server 中 0 可以直接代表 False,1 可以直接代表 True,我如果要在同一個欄位回應 True/False 你的方法就不行。
select datepart(weekday,'2009-01-20')%6 -- 3
select datepart(weekday,'2009-01-21')%6 -- 4
select datepart(weekday,'2009-01-22')%6 -- 5
select datepart(weekday,'2009-01-23')%6 -- 0
select datepart(weekday,'2009-01-24')%6 -- 1
select datepart(weekday,'2009-01-25')%6 -- 1
對於想在程式中單純的判斷「假日」與「非假日」就無法得到 0 與 1 的效果,因為在 SQL Server 中 0 可以直接代表 False,1 可以直接代表 True,我如果要在同一個欄位回應 True/False 你的方法就不行。
如何在 Excel 中計算兩個日期之間的月數
若要計算任何兩個日期之間的月數,請使用下列其中一種方法。注意,這兩種方法都使用下列資訊:
針對此方法,請使用下列公式
針對此方法,請使用下列公式
- EDate = 較早日期
- LDate = 較晚日期注意:如果您直接在此公式中輸入 LDate 或 EDate,而不是輸入到其儲存格參照中,就必須以雙引號括住 (例如 "9/7/00")。
無條件進位
此方法不在其計算中使用月份日期。例如,假設開始日期是 10/31/00,結束日期是 11/2/00,即使只過了兩天,也會傳回一個月。針對此方法,請使用下列公式
=(YEAR(LDate)-YEAR(EDate))*12+MONTH(LDate)-MONTH(EDate)
如以下列範例所示:- 在儲存格 A1 中輸入 10/31/10。
- 在儲存格 A2 中輸入下列公式:=(YEAR(NOW())-YEAR(A1))*12+MONTH(NOW())-MONTH(A1)傳回的數字等於從 10/31/99 到今天日期的月數,並無條件進位到下一個整數。
無條件捨去
此方法在其計算中使用天數,並將最接近的完整月數後面無條件捨去。例如,假設開始日期是 10/30/00,結束日期是 11/30/10,則會傳回一個月;不過,結束日期若為 11/29/10,則傳回 0。針對此方法,請使用下列公式
=IF(DAY(LDate)>=DAY(EDate),0,-1)+(YEAR(LDate)-YEAR(EDate))
*12+MONTH(LDate)-MONTH(EDate)
如以下列範例所示:*12+MONTH(LDate)-MONTH(EDate)
- 在儲存格 A1 中輸入 10/31/10。
- 在儲存格 B1 中輸入下列公式:=IF(DAY(NOW())>=DAY(A1),0,-1)+(YEAR(NOW())-YEAR(A1)) *12+MONTH(NOW())-MONTH(A1)注意:請確定儲存格 B1 已格式化為 [通用格式]。傳回的數字等於從 10/31/10 到今天日期的月數,並將最接近的完整月數後面無條件捨去。
沒有留言:
張貼留言