【问题标题】:SQL Server 2008 WHERE clause with CASE / WHEN and NULL value带有 CASE / WHEN 和 NULL 值的 SQL Server 2008 WHERE 子句
【发布时间】:2013-11-12 23:46:45
【问题描述】:

我正在尝试写类似的东西:

SELECT *
FROM MyTable m
WHERE m.Category = CASE WHEN @Category IS NULL THEN m.Category ELSE @Category END

基本上,我需要m.Category 等于@Category 的行,如果这个行有一个值;否则,我需要所有线路。

但如果m.Category 具有NULL 值,则不会发回该行,因为SQL 需要WHERE m.Category IS NULL 而不是WHERE m.Category = NULL

那么,我如何修改我的请求以告诉 SQL:“如果 @Category 为空,我需要所有行(即使 m.Category 为空的行),但如果 @Category 有值,我只需要m.Category 匹配 @Category 的行?

【问题讨论】:

    标签: sql sql-server sql-server-2008 null case


    【解决方案1】:

    你可以这样写:

    select *
    from MyTable m
    where @Category is null or m.Category = @Category
    

    【讨论】:

    • 好的,这太容易了,我什至没有考虑过......非常感谢
    • @roman-pekar - 你怎么称呼它?我大约 5 年前使用它,今天需要它,但我一生都记不起它叫什么。
    • @Steven 好吧我不知道,不确定它有什么具体的名字
    猜你喜欢
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多