【发布时间】:2012-11-20 13:24:40
【问题描述】:
如果? 为空,是否可以修改以下查询以返回所有记录?
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;
【问题讨论】:
-
这让我更加讨厌 T-SQL...
标签: sql parameters where-clause
如果? 为空,是否可以修改以下查询以返回所有记录?
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?;
【问题讨论】:
标签: sql parameters where-clause
试试这个:
SELECT *
FROM MY_TABLE
WHERE @parameter IS NULL OR NAME = @parameter;
【讨论】:
您还可以使用函数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);
甲骨文:
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME);
SQL Server / SYBASE:
SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME);
【讨论】:
NAME 中有空值,这将不起作用。但是对于不可为空的列,这是要走的路=)(编辑:至少在 SQL Server 中没有)
下一个。查询将处理名称(表列值)也可以为 NULL 的情况:
SELECT NAME, SURNAME FROM MY_TABLE WHERE COALESCE(NAME,'') = COALESCE(?,NAME,'');
【讨论】:
SELECT NAME
FROM MY_TABLE
WHERE NAME LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END
这将完美地工作,但它只会返回非空值。
【讨论】: