当value为null时,在查询中设置默认值

and*_*ter 10 sql sql-server-2005

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

就像是

SELECT RegName,
    RegEmail,
    RegPhone,
    RegOrg,
    RegCountry,
    DateReg,
    (Website IS NULL? 'no website' : Website) AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
Run Code Online (Sandbox Code Playgroud)

它将在sql server 2005上运行

谢谢

Gia*_*los 26

使用以下内容:

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       ISNULL(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL
Run Code Online (Sandbox Code Playgroud)

或者,@ Lieven指出:

SELECT RegName,
       RegEmail,
       RegPhone,
       RegOrg,
       RegCountry,
       DateReg,
       COALESCE(Website,'no website')  AS WebSite 
FROM   RegTakePart 
WHERE  Reject IS NULL
Run Code Online (Sandbox Code Playgroud)

COALESCE的动态是你可以定义更多的参数,所以如果第一个是null然后得到第二个,如果第二个是null得到第三个等等...


T. *_*aum 9

如上所述,聚结溶液是优选的。作为一个额外的好处,您可以对“派生”值与选定值使用合并,如下所示:

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

使用“iif”或“case”,您需要重复内联,而使用coalesce则不需要,它允许您避免在该返回中出现“null”结果......


Tim*_*ter 7

用途CASE:

SELECT regname, 
       regemail, 
       regphone, 
       regorg, 
       regcountry, 
       datereg, 
       CASE 
         WHEN website IS NULL THEN 'no website' 
         ELSE website 
       END AS WebSite 
FROM   regtakepart 
WHERE  reject IS NULL 
Run Code Online (Sandbox Code Playgroud)

或者COALESCE:

....
COALESCE(website, 'no website') AS WebSite 
....
Run Code Online (Sandbox Code Playgroud)