我可能漏掉了一些显而易见的东西!提前感谢任何帮助。
我正在尝试在嵌入式 SQL 语句中使用 CASE 语句。我只想评估表达式一次,所以我想把表达式放在 CASE 部分,然后在每个 WHEN 中评估结果。以下是示例:
SELECT
MyTable.ColumnA,
CASE DateDiff(d, MyTable.MyDate, getDate())
WHEN <= 0 THEN 'bad'
WHEN BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END as MyCalculatedColumn,
MyTable.SomeOtherColumn
我知道我可以做到这一点:
CASE
WHEN DateDiff(d, MyTable.MyDate, getDate()) <= 0 THEN 'bad'
WHEN DateDiff(d, MyTable.MyDate, getDate()) BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END
但在我的第一个例子中,SQL似乎不喜欢这个语句:
WHEN <= 0 THEN 'bad'
请注意,该语句与其他 SQL 语句一样是内联的,因此我无法执行以下操作:
DECLARE @DaysDiff bigint
SET @DaysDiff = DateDiff(d, MyTable.MyDate, getDate())
CASE @DaysDiff
WHEN <= 0 THEN 'bad'
WHEN BETWEEN 1 AND 15 THEN 'reasonable'
ELSE 'good'
END
我的实际DateDiff表达式更加复杂,我只想维护其逻辑,并且只有在必要的时候才将其计算一次。
再次感谢...
CASE expression WHEN value THEN ...
时,您需要使用标量值。相反,您将不得不使用CASE WHEN Boolean Expression THEN...
。 - Thom ACASE expression WHEN value
只能进行相等性检查。 - codeulike