sql查询如果参数为null则选择全部

时间:2012-11-20 13:24:41

标签: sql parameters

我有以下问题:

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;

现在我想要那个'?'为NULL,必须选择所有记录。 我怎样才能在SQL中实现这一点? 感谢

4 个答案:

答案 0 :(得分:62)

试试这个:

SELECT * 
FROM MY_TABLE 
WHERE @parameter IS NULL OR NAME = @parameter;

答案 1 :(得分:30)

您还可以使用函数IFNULLCOALESCENVLISNULL来检查空值。这取决于您的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,'');