SQL 匹配值或使用 LIKE“%”的 CASE

SQL CASE that matches value or uses LIKE '%'

如果定义的变量为空,我正在尝试进行通配符检索。但是我想不出正确的语法。

SELECT ...
FROM ...
WHERE customers = CASE
    WHEN ISNULL(@customerID, '') = '' THEN LIKE '%'
    ELSE @customerID
END

就这么简单:

WHERE customers = NULLIF(@customerID, '') OR NULLIF(@customerID, '') IS NULL

表达式 NULLIF(x, '') 会将 '' 转换为 null。然后我们利用 null 比较的工作原理:

  • 如果 @customerID 不为空,则第一个条件仅在完全匹配时为真
  • 如果 @customerID 为空,则第一个条件将为假(没有任何内容等于空),但第二个条件对所有行都为真

DB<>Fiddle

你可以简单的这样说

SELECT...
FROM...
WHERE customers = ISNULL(@customerID,'') OR (ISNULL(@customerID,'') = '')

这应该可行,因为如果满足第一个条件,它将 select 特定的客户 ID。否则,如果客户 ID 为空,它将 select 所有数据,因为以下条件:

(ISNULL(@customerID,'') = ''

如果为 NULL,'' = '' 将为真。