0

我正在尝试识别我们的调度系统中打开的时间块,我能做到这一点的唯一方法是检查块的描述是否为 NULL。

时间以 INT 形式存储在数据库中,因此此 case 语句用于将 3 或 4 个字符的 INT 重新构建为 DATETIME。

这是我的代码。'stm' 是块的开始时间。

case
when len(sd.sd_stm)=4 AND sd.sd_block_display IS NULL THEN convert(datetime,'2013-01-01 ' + substring(convert(varchar,sd.sd_stm),1,2)+':'+substring(convert(varchar,sd.sd_stm),3,2))
when len(sd.sd_stm)=3 AND sd.sd_block_display IS NULL THEN convert(datetime,'2013-01-01 ' + substring(convert(varchar,sd.sd_stm),1,1)+':'+substring(convert(varchar,sd.sd_stm),2,2))
ELSE '2013-01-01 00:00:00'
END

样本输入 - stm = 730 期望输出 - 2013-01-01 07:30:00.000 实际输出 - 2013-01-01 00:00:00.000

我似乎遇到的问题是,一旦它将 block_display 评估为 NULL,它就会为 stm 的值返回 null。当我为 block_display IS NOT NULL 执行此代码时,它执行得很好。

请问有什么建议吗?

4

0 回答 0