1

我正在尝试创建一个 T-SQL case 语句来根据字段是否NULL包含值或是否包含值来过滤查询。如果您可以分配NULLNOT NULL作为案例的结果,那将很简单,但这似乎是不可能的。

这是伪代码:

WHERE DateColumn = CASE @BitInput
   WHEN 0 THEN (all null dates)
   WHEN 1 THEN (any non-null date)
   WHEN NULL THEN (return all rows)

据我了解,WHEN 0可以通过根本不提供WHEN条件(返回NULL值)来实现条件。

WHEN 1条件似乎可以使用通配符,但我收到有关类型转换的错误。将列分配给自身可以解决此问题。

我不知道该怎么办WHEN NULL。我的内部逻辑似乎认为将列分配给自身应该可以解决这个问题,但它并没有如上所述。

我已经使用动态 SQL 重新创建了它,但出于各种原因,我更喜欢在本机代码中创建它。

我会很感激任何意见。谢谢。

4

1 回答 1

2

CASE 表达式(如 OMG Ponies 所说)正在混合和匹配数据类型(如您所见),此外您无法使用=或 WHEN 与 NULL 进行比较。

WHERE
   (@BitInput = 0 AND DateColumn IS NULL)
   OR
   (@BitInput = 1 AND DateColumn IS NOT NULL)
   OR
   @BitInput IS NULL

您可能可以使用 CASE 编写它,但您真正想要的是 OR。

您也可以使用IF..ELSEUNION ALL将 3 个案例分开

于 2010-06-30T17:33:36.987 回答