我正在运行一个非常简单的查询,但是对于某些结果,一个字段中的值为null。如果值为null,如何将该值设置为“字符串”?
像
这样的东西SELECT RegName,
RegEmail,
RegPhone,
RegOrg,
RegCountry,
DateReg,
(Website IS NULL? 'no website' : Website) AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
它将在sql server 2005上运行
感谢
答案 0 :(得分:24)
使用以下内容:
SELECT RegName,
RegEmail,
RegPhone,
RegOrg,
RegCountry,
DateReg,
ISNULL(Website,'no website') AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
或者,@ Lieven指出:
SELECT RegName,
RegEmail,
RegPhone,
RegOrg,
RegCountry,
DateReg,
COALESCE(Website,'no website') AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
COALESCE的动态是你可以定义更多的参数,所以如果第一个是null然后得到第二个,如果第二个是null得到第三个等等......
答案 1 :(得分:5)
使用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
或COALESCE
:
....
COALESCE(website, 'no website') AS WebSite
....
答案 2 :(得分:2)
如上所述,聚结溶液是优选的。作为一个额外的好处,你可以使用coalesce来对抗"派生"值与选定值的比较如下:
SELECT
{stuff},
COALESCE( (select count(*) from tbl where {stuff} ), 0 ) AS countofstuff
FROM
tbl
WHERE
{something}
使用" iif"或"案例"你需要重复内联,而合并你不需要它,它可以让你避免使用" null"导致返回...
答案 3 :(得分:1)
您只需使用ISNULL(website, 'yourstring')
。
因此,您的查询将如下:
SELECT RegName,
RegEmail,
RegPhone,
RegOrg,
RegCountry,
DateReg,
ISNULL(website, 'no website') AS WebSite
FROM RegTakePart
WHERE Reject IS NULL
答案 4 :(得分:1)
为了避免给其他用户带来一些问题:
问题1 +解决方案:
如果您计划将ISNULL
函数与Access数据库一起使用,请注意Access中实现的ISNULL
函数与SQL Server实现不同。
访问ISNULL
功能始终返回TRUE
或FALSE
。
因此,您必须围绕IIF
用法使用自定义ISNULL
功能。
问题2 +解决方案:
此外,如果您希望为列使用与Alias相同的字段名称,这可能会导致Access数据库引擎通知您字段中存在“循环引用”。 / p>
因此,如果您需要使用与Alias相同的字段名称,则只需在字段名称前添加表名称即可。 (例如:您必须使用RegTakePart.Website
而不是简单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
答案 5 :(得分:0)
检查COALESCE功能
http://msdn.microsoft.com/en-us/library/ms190349.aspx
SELECT RegName,RegEmail,RegPhone,RegOrg,RegCountry,DateReg,COALESCE(Website, 'no website') AS WebSite FROM RegTakePart WHERE Reject IS NULL