2014-01-20 31 views
2

我正在使用下面的查询来获取列值,以逗号分隔。如何用SQL中的空字符串替换NULL?

(SELECT STUFF ((SELECT ',' + CAST(Proj_ID AS VARCHAR) FROM PROJECT 
    left join dbo.PROJ_STA on 
    Project.PROJ_STA_ID = Project.PROJ_STA_ID 
    WHERE ENTER_DT < DATEADD(Year, -7, GETDATE()) AND PROJ_LFCYC_STA_CD = 'A' AND 
    PROJ_STA.PROJ_STA_DS = 'Cancelled' FOR XML PATH('')), 1, 1, '') 
    AS Enter_Date) 

任何人都可以指导我在这里用空字符串替换空值。

更新时间:

(SELECT STUFF ((SELECT ',' + coalesce(CAST(Proj_ID AS VARCHAR), '') FROM PROJECT 
    left join dbo.PROJ_STA on 
    Project.PROJ_STA_ID = Project.PROJ_STA_ID 
    WHERE ENTER_DT < DATEADD(Year, -7, GETDATE()) AND PROJ_LFCYC_STA_CD = 'A' AND 
    PROJ_STA.PROJ_STA_DS = 'Cancelled' FOR XML PATH('')), 1, 1, '') 
    AS Enter_Date) 
+0

什么是Proj_ID?一个int? – Liath

+0

是的但是因为我用逗号分隔它,我用它作为Varchar – sk7730

+0

Try - select','+ convert(varchar,coalesce(Proj_ID,'')) – Liath

回答

1

你可以白出空值与coalesce功能

select coalesce(MyColumn, '') 

凝聚接受任何数量的列或常量,返回的第一个是不为空。

您所查询的是:

(SELECT STUFF ((SELECT ',' + convert(varchar, coalesce(Proj_ID, '')) FROM PROJECT 
left join dbo.PROJ_STA on 
Project.PROJ_STA_ID = Project.PROJ_STA_ID 
WHERE ENTER_DT < DATEADD(Year, -7, GETDATE()) AND PROJ_LFCYC_STA_CD = 'A' AND 
PROJ_STA.PROJ_STA_DS = 'Cancelled' FOR XML PATH('')), 1, 1, '') 
AS Enter_Date) 
+0

谢谢,但我仍然得到空值,如果我使用coalsec或在我的查询isnull。 – sk7730

+0

你会得到什么错误? – MusicLovingIndianGirl

+0

如果您已经尝试过使用coalesce并且IsNull可以显示与它无法工作的版本?这比查询函数本身更可能成为查询的问题! – Liath

6

从AdventureWorks数据库尝试IsNull

select ISNULL(Column,'') as ColumnName 

COALESCE

select COALESCE(NULLIF(ColumnName,''), 'Column') 
+0

亚试过,但我再次获得空值。 – sk7730

+0

@saravanakumarr,请检查我编辑的答案。 – MusicLovingIndianGirl

+0

这也是取值为空值。 – sk7730

2

一个例子

select e.ModifiedDate, ISNULL(p.FirstName,'') as FirstName 
from Person.BusinessEntity as e 
    left join Person.Person as p on e.BusinessEntityID = p.BusinessEntityID 

通过使用此项,如果没有匹配的人员记录,名字将显示为空字符串而不是NULL