SQL筆記:利用SQL語法計算學年期
沒什麼營養,純粹偷懶筆記在此,日後就少花時間重想一次。
利用SQL語法計算學年與學期
SQL語法如下,使用時@dNow參數請自行取代成為想要引用的欄位名稱。
DECLARE @dNow AS DATE = GETDATE()
SELECT
@dNow AS 原始日期,
CASE
WHEN
MONTH(@dNow) BETWEEN 1 AND 7
THEN
YEAR(@dNow)-1912
ELSE
YEAR(@dNow)-1911
END AS 學年,
CASE
WHEN
MONTH(@dNow) BETWEEN 2 AND 7
THEN
2
ELSE
1
END AS 學期
輸出如下:
原始日期 學年 學期
2022-11-01 111 1
同場加映:利用C#語法計算學年與學期
這裡簡單撰寫一下C#語言計算學年、學期的程式碼,要注意的是這邊採用了C# 9.0的模式比對增強功能(Pattern-matching),並且順手撰寫了一下測試輸出,看起來大致上沒有問題:
GetYearSemester函式如下:
public static (int iYear, int iSemester) GetYearSemester(System.DateTime oDate)
{
return (
oDate.Month switch {
>= 1 and <= 7 => oDate.Year - 1912,
_ => oDate.Year - 1911,
},
oDate.Month switch {
>= 2 and <= 7 => 2,
_ => 1,
}
);
}
撰寫一下調用測試看看輸出是否有誤,確認輸出無誤。
var oDate = System.DateTime.Now;
for (int i = 0; i < 1000; i++)
{
var oTempDate = oDate.AddDays(i);
var oResult = GetYearSemester(oTempDate);
Console.WriteLine($"{oTempDate.ToString("yyyy-MM-dd")}: {oResult.iYear}學年度第{oResult.iSemester}學期");
}
輸出如下:
2022-11-01: 111學年度第1學期
...
2023-01-31: 111學年度第1學期
2023-02-01: 111學年度第2學期
...
2023-07-31: 111學年度第2學期
2023-08-01: 112學年度第1學期
...
2024-01-31: 112學年度第1學期
2024-02-01: 112學年度第2學期
...