我有以下问题:
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;
现在我想要那个'?'为NULL,必须选择所有记录。 我怎样才能在SQL中实现这一点? 感谢
答案 0 :(得分:62)
试试这个:
SELECT *
FROM MY_TABLE
WHERE @parameter IS NULL OR NAME = @parameter;
答案 1 :(得分:30)
您还可以使用函数IFNULL
,COALESCE
,NVL
,ISNULL
来检查空值。这取决于您的RDBMS。
<强>的MySQL 强>:
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME);
或
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME);
<强> ORACLE 强>:
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME);
SQL Server / SYBASE :
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME);
答案 2 :(得分:0)
SELECT NAME
FROM MY_TABLE
WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END
这将很好地工作,但只会返回非null值。
答案 3 :(得分:0)
愚弄。查询将处理Name(表列值)也可以为NULL的情况:
SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');