Sql 值为空时在查询中设置默认值

Sql 值为空时在查询中设置默认值,sql,sql-server-2005,Sql,Sql Server 2005,我正在运行一个非常简单的查询,但是对于某些结果,一个字段中的值为null。如果该值为空,如何将其设置为字符串 差不多 SELECT RegName, RegEmail, RegPhone, RegOrg, RegCountry, DateReg, (Website IS NULL? 'no website' : Website) AS WebSite FROM RegTakePart WHERE Reject IS NULL 它将在SQLServ

我正在运行一个非常简单的查询,但是对于某些结果,一个字段中的值为null。如果该值为空,如何将其设置为字符串

差不多

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    (Website IS NULL? 'no website' : Website) AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
它将在SQLServer2005上运行

谢谢

请使用以下内容:

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       ISNULL(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL
或者如利文所说:

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       COALESCE(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL
COALESCE的动态是,您可以定义更多参数,因此,如果第一个参数为null,则获取第二个参数,如果第二个参数为null,则获取第三个参数等等。

您只需使用ISNULLwebsite“yourstring”

因此,您的查询如下所示:

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    ISNULL(website, 'no website') AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
用例:

或结合:


检查合并功能


如上所述,优选聚结溶液。作为一个附加的好处,您可以对派生值与选定值使用合并,如中所示:

SELECT
       {stuff},
       COALESCE( (select count(*) from tbl where {stuff} ), 0 )  AS countofstuff
FROM
       tbl
WHERE
       {something}

使用iif或case,您需要重复内联,而使用coalesce则不需要,它允许您在返回时避免出现空结果…

为避免其他用户遇到一些问题:

问题1+解决方案:

如果计划将ISNULL函数用于Access数据库,请注意在Access中实现的ISNULL函数与SQL Server实现不同

Access ISNULL函数始终返回TRUE或FALSE。 因此,您必须在ISNULLusage周围使用自定义IIF函数

问题2+解决方案:

此外,如果希望为列使用与别名相同的字段名,这可能会导致Access数据库引擎通知您存在对该字段的循环引用

因此,如果需要使用与别名相同的字段名,只需在字段名之前添加表名。示例:您必须使用RegTakePart.Website,而不是简单的Website。这样,您就可以自由地使用网站作为专栏的别名

避免这两个问题的全局工作和测试SQL查询如下:

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    IIF(RegTakePart.Website IS NULL, 'no website, RegTakePart.Website) AS Website
FROM RegTakePart
WHERE Reject IS NULL

看看ISNULL或COALESCE函数。谢谢大家,我会接受答案,只要它允许我。不管你选择什么答案,它们都会工作。COALESCE和ISNULL都是解决方案。如果迁移到MySQL,请使用ISNULL。sintax与本例无关,但仍然值得注意,COALESCE的缺点是它扩展为case语句,因此COALESCESELECT Col FROM T,‘No Value’,扩展为当SELECT Col FROM T不为NULL时的情况,然后从表ELSE“No Value”END中选择一些内容,这意味着如果结果不为NULL,则子查询将执行两次。ISNULL不显示这种行为。coalesce的一个优点是它在ANSII标准中,而ISNULL不是。将coalesce的第一个参数包装为非常重要,否则查询将无法编译。谢谢你
SELECT RegName,RegEmail,RegPhone,RegOrg,RegCountry,DateReg,COALESCE(Website, 'no website') AS WebSite FROM RegTakePart WHERE Reject IS NULL
SELECT
       {stuff},
       COALESCE( (select count(*) from tbl where {stuff} ), 0 )  AS countofstuff
FROM
       tbl
WHERE
       {something}
SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    IIF(RegTakePart.Website IS NULL, 'no website, RegTakePart.Website) AS Website
FROM RegTakePart
WHERE Reject IS NULL