SQL 查询 returns 一个负数但不将其解释为负数而是正数

SQL Query returns a negative number but does not interpret it as a negative number but a positive number

当我 运行 查询时,它正在执行 DATEDIFF 并得到一个负数,因为这是正确的,但它没有将整数解释为负数,而是解释为正数,导致使用错误的颜色打印因为它应该是红色的。当 return datediff <0.

时,我缺少什么来使负数工作应该打印红色
Select
STRING(
case 
when datediff('hh',getdate(), ( CONVERT (CHAR(10),Table.end_date,121) ||' '|| Table.end_time ) ) > 7 
and "Table"."column" = '12' or "Table"."column" = 'JE'
then '</font><font color = green ><b>'
when datediff('hh',getdate(), ( CONVERT (CHAR(10),Table.end_date,121) ||' '|| Table.end_time ) ) > 2
and
datediff('hh',getdate(), ( CONVERT (CHAR(10),Table.end_date,121) ||' '|| Table.end_time ) ) <= 7
and "Table"."column" = '12' or "Table"."column" = 'JE'
then '</font><font color = yellow><b>'
when datediff('hh',getdate(), ( CONVERT (CHAR(10),Table.end_date,121) ||' '|| Table.end_time ) ) < 2
and "Table"."column" = '12' or "Table"."column" = 'JE'
then '</font><font color = red><b>'
else  '</font><font color = black >' end ,"Table"."column") AS "column"

您可能遇到了 operator precedence 问题。

您的条件是 diff and this or that 的变体。 and 的优先级高于 orone and two or three 真的意味着...

(diff and this) or that.

换句话说,如果 that 为真,它将永远为真。在调用您的案例时,如果 "Table"."column" = 'JE' 为真,则整个语句将为真。这意味着你总是会变绿或变黑。

你的意思可能是

diff and (this or that)

(diff and diff) and (this or that)

其他说明。

  • end_dateend_time 转换为正确的日期和时间列。
  • 添加一个 end_at 时间戳列,该列已连接它们。

这两者都会使查询更简单、更快;您不必转换字符串,像上面这样的比较将能够在 end_at.

上使用索引
  • 除非必须,否则不要引用 table 和列名,这会使它们成为 case-sensitive.