从 SQL Server 中的当前日期获取当前学年
Posted
技术标签:
【中文标题】从 SQL Server 中的当前日期获取当前学年【英文标题】:Get current school year from the current date in SQL Server 【发布时间】:2016-01-08 20:02:39 【问题描述】:所以有一个与此非常相似的论坛帖子,但我无法运行这些命令。我正在使用 SQL Server 2008 R2,需要帮助来获取当前学年。
基本上,我需要一种使用当前日期生成当前学年的方法。从当年的 8 月到次年的 8 月为 1 个学年。
例如。 2015 年 8 月 - 2016 年 7 月需要拉起 2015 年,从 2016 年 8 月开始,需要拉起 2016 年。
我对 SQL 还很陌生,因此我们将不胜感激。
【问题讨论】:
你需要在声明中包含这个吗?程序? 您可能会更幸运地搜索“会计年度”,例如:***.com/questions/1771995/… 我工作过的大多数学生信息系统都有一个定义学年的日历表(但是 SIS 定义它),以及学年的开始日期和结束日期。我工作的 SIS 目前有一张用于学年的表格,一张用于标记期间日期的表格,以及一张用于确定会员资格和出勤率的表格,其中包含学年本身的每一天。我们的 SIS 还通过构建分解所有日历来处理电源故障或水管中断等奇怪情况。 【参考方案1】:听起来你在找这个:
IF Month(GetDate()) >=8
BEGIN
SELECT Year(GetDate())
END
ELSE
BEGIN
SELECT Year(GetDate())-1
END
编辑:
在 select 语句的 where 子句中使用它:
DECLARE @currentSchoolYear INT
IF Month(GetDate()) >=8
BEGIN
SELECT @currentSchoolYear = Year(GetDate())
END
ELSE
BEGIN
SELECT @currentSchoolYear = Year(GetDate())-1
END
SELECT * FROM dbo.dates
WHERE CASE WHEN Month(datevalue) >=8 THEN Year(datevalue)
ELSE Year(datevalue)-1
END = @currentSchoolYear
显然将“dbo.dates”替换为您的表名,将“datevalue”替换为您要比较的任何列。这将返回当前学年的行
【讨论】:
这么快的问题。我如何将其合并到查询的 where 部分中?我需要能够告诉查询仅提取与正确学年相对应的记录,其中学年由您的上述语句定义。 我假设我可以将 @currdate 声明为 INT,然后根据 getdate() 字段选择该 INT。 用 select 语句中的示例编辑了我的答案。【参考方案2】:SELECT value1, value,
(CASE WHEN GETDATE() BETWEEN '20150801' AND '20160731' THEN 2015
WHEN GETDATE() BETWEEN '20160801' AND '20170731' THEN 2016
ELSE 2014) AS schoolYear
FROM dbTable
WHERE ...
【讨论】:
这肯定不会超出您指定的日期范围,并假设涉及到一个表。 不,不会的;然而,由于在学术界工作多年,基于日期的方法可能更可取,因为学年通常在月中旬开始。如果月初保持快速,那么您的方法肯定优于我的方法。但在我看来,给某人否定是有点极端。如果我工作过的大学里有人使用你的方法,那就失败了。 我们的学年在月中开始/结束;但是,对于这种情况,我认为任何一种解决方案都可以正常工作!非常感谢您的回复。以上是关于从 SQL Server 中的当前日期获取当前学年的主要内容,如果未能解决你的问题,请参考以下文章