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
为空,则第一个条件将为假(没有任何内容等于空),但第二个条件对所有行都为真
你可以简单的这样说
SELECT...
FROM...
WHERE customers = ISNULL(@customerID,'') OR (ISNULL(@customerID,'') = '')
这应该可行,因为如果满足第一个条件,它将 select 特定的客户 ID。否则,如果客户 ID 为空,它将 select 所有数据,因为以下条件:
(ISNULL(@customerID,'') = ''
如果为 NULL,'' = '' 将为真。
如果定义的变量为空,我正在尝试进行通配符检索。但是我想不出正确的语法。
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
为空,则第一个条件将为假(没有任何内容等于空),但第二个条件对所有行都为真
你可以简单的这样说
SELECT...
FROM...
WHERE customers = ISNULL(@customerID,'') OR (ISNULL(@customerID,'') = '')
这应该可行,因为如果满足第一个条件,它将 select 特定的客户 ID。否则,如果客户 ID 为空,它将 select 所有数据,因为以下条件:
(ISNULL(@customerID,'') = ''
如果为 NULL,'' = '' 将为真。