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

TSQL:在SELECT语句中比较日期字段并实现多条件赋值

解决方案:使用CASE表达式实现单SELECT语句的条件分支

完全不需要拆分语句,T-SQL的CASE表达式就是专门用来处理这种在SELECT中根据不同条件返回不同值的场景的。根据你的需求,我们可以按优先级顺序编写条件判断:

  1. 首先检查rDatumZavr是否为NULL,返回'nema vneseno'
  2. 然后判断转换为datetime的rDatum是否大于rDatumZavr,返回'docni'
  3. 最后处理剩下的情况(即rDatum小于等于rDatumZavr),返回'ne docni'

修改后的完整查询语句

declare @godina as integer = 2020
select 
    vtRokSi.KodSI, 
    vtRokSi.rKod, 
    vtRokSi.rDatum, 
    vtRokSi.rDatumZavr,
    CASE
        WHEN vtRokSi.rDatumZavr IS NULL THEN 'nema vneseno'
        WHEN CONVERT(datetime, vtRokSi.rDatum) > vtRokSi.rDatumZavr THEN 'docni'
        ELSE 'ne docni'
    END as docni
from GP.dbo.VT_ROK_SI as vtRokSi
where vtRokSi.GodGP = @godina

关键说明

  • 条件顺序很重要:CASE是按从上到下的顺序匹配条件的,所以必须先判断rDatumZavr IS NULL——如果rDatumZavr为NULL,后续的比较(>, <=)都会返回UNKNOWN,无法匹配到后面的分支。
  • 类型转换:虽然SQL会自动将date类型的rDatum隐式转换为datetime来和rDatumZavr比较,但显式使用CONVERT或CAST能让代码更清晰,避免潜在的类型转换问题。
  • 无需拆分语句:CASE表达式直接嵌入在SELECT列表中,所有逻辑都在一个查询里完成,效率和可读性都更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:17:36