首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取SQL SERVER中的当前学期。

获取SQL SERVER中的当前学期。
EN

Stack Overflow用户
提问于 2018-07-17 15:23:24
回答 1查看 636关注 0票数 0

我在这个query上遇到了麻烦,它写着Incorrect syntax near the keyword 'BETWEEN',但当我试图在没有BETWEEN的情况下单独执行CASE WHEN条件时,它运行正常,也与标题有关,是不是在SQL SERVER中获取学期的合适方式?

代码语言:javascript
复制
DECLARE @ActiveSemester INT

SET @ActiveSemester = ISNULL((SELECT [value]
FROM spms_tblProfileDefaults WHERE eid = 7078 and ps_id = 1), (SELECT [value] 
FROM spms_configs WHERE actions = 'semester_active') )

SELECT FORMAT((SUM((DATEDIFF(MINUTE, a.actual_start_time, a.actual_end_time) 
- isnull(datediff(minute, break_start, break_end), 0))/ 60.0)), '0.00')
FROM spms_tblSubTask as a
LEFT JOIN pmis.dbo.employee as b ON a.eid = b.eid
LEFT JOIN pmis.dbo.time_reference as c ON c.code = ISNULL(b.TimeReference, 'TIME14')
LEFT JOIN dbo.spms_vwOrganizationalChart as e ON a.eid = e.eid
cross apply
 (
        select  break_start = case  when c.break_from between a.actual_start_time and a.actual_end_time
                    then c.break_from
                    when a.actual_start_time between c.break_from and c.break_to
                    then a.actual_start_time
                    else NULL
                    end,
                break_end  = case   when c.break_to between a.actual_start_time and a.actual_end_time
                    then c.break_to
                    when a.actual_end_time between c.break_from and c.break_to
                    then a.actual_end_time
                    end
) as d
WHERE
b.Shift = 0 and a.eid = 7078 and
YEAR(a.start_date_time) = YEAR(GETDATE()) and a.action_code = 1 
and 
(CASE 
WHEN 
@ActiveSemester = 1
THEN 
a.start_date_time BETWEEN CAST(CONCAT('01/01/',YEAR(GETDATE())) as date) AND     
CAST(CONCAT('06/30/',YEAR(GETDATE())) as date)
ELSE 
a.start_date_time BETWEEN CAST(CONCAT('07/01/',YEAR(GETDATE())) as date) AND     
CAST(CONCAT('12/31/',YEAR(GETDATE())) as date)
END)
EN

回答 1

Stack Overflow用户

发布于 2018-07-17 15:39:32

似乎另一个答案被删除了,下面是我所做的,因为另一个答案指出了CASE的正确用法

代码语言:javascript
复制
WHERE
'other condition' and
a.start_date_time BETWEEN 
(CASE 
WHEN @ActiveSemester = '1'
THEN
CAST(CONCAT('01/01/',YEAR(GETDATE())) as date)
ELSE
CAST(CONCAT('07/01/',YEAR(GETDATE())) as date)
END)
AND 
(CASE 
WHEN @ActiveSemester = '1'
THEN
CAST(CONCAT('06/30/',YEAR(GETDATE())) as date)
ELSE
CAST(CONCAT('12/31/',YEAR(GETDATE())) as date)
END)

这样,我就得到了我想要的结果。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51375485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档