You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中Case语句失效问题:按BookInDT计算test1列值需求

问题分析与解决方案

你当前test1列的Case语句条件和实际需求完全不符,这就是条件看似被“忽略”的核心原因。按照你提出的需求——当BookInDT早于02/01/2023时取值为28,否则取BookInDT与@EndDate的日期间隔,以下是修正后的代码及说明:

修正后的完整SQL代码

DECLARE @StartDate datetime                            
  , @EndDate datetime                        
                         
----First Day of Last Month
SET @StartDate = DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) --First Day of Last Month

--First Day of Current Month
SET @EndDate = DATEADD(mm, DATEDIFF(m,0,GETDATE()),0) 


SELECT 
    CONVERT(VARCHAR(10), b.BookInDT, 101) AS [BookInDT], 
    CONVERT(VARCHAR(10), o.AwareDT, 101) AS [DT ICE Hold],
    case when (dbo.fn_IsInJailByBookInID(b.BookInID)) = 1 then 'yes' else 'no' end as [InJail] , 
    traa.AgencyName AS [Agency Name], 
    CONVERT(VARCHAR(10), r.ReleasedDT, 101) AS [ReleaseDT], 


    DATEDIFF (day, b.bookindt, @enddate) as [Total Days InJail], 

    DATEDIFF (day, @StartDate, @EndDate) AS [Days InJail for Month],

    -- 修正后的test1列逻辑
    case when b.BookInDT < CONVERT(datetime, '02/01/2023', 101) 
         then 28 
         else DATEDIFF(day, b.BookInDT, @EndDate) 
    end as [test1]

FROM ...

关键说明

  • 原Case语句的条件b.bookindt = @enddate几乎不会匹配(仅当BookInDT恰好是当月第一天0点整时才触发),所以看起来像是条件被忽略,实际是没有符合条件的行触发该分支。
  • 日期比较时用CONVERT(datetime, '02/01/2023', 101)显式指定格式(101代表mm/dd/yyyy),可避免因数据库语言、日期格式设置导致的解析错误;也可以直接用ISO标准日期格式'2023-02-01',兼容性更强。

内容的提问来源于stack exchange,提问作者jr7138

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:35:06