用空值替换NULL值

时间:2017-04-05 15:25:27

标签: sql-server null

我有以下SQL服务器查询:

SELECT  COL.FullName AS 'Name', 
    COB.Reference AS 'Reference',
    COL.WordProcessorText AS 'Template Text',
    CASE COB.Available 
        WHEN 1 THEN 'TRUE'
        WHEN 0 THEN 'FALSE'
    END AS 'Available For Selection',
    COL.HelpText AS 'Help Text',
    CASE COB.DisplayAlert 
        WHEN 1 THEN 'TRUE'
        WHEN 0 THEN 'FALSE'
    END AS 'Display Alert',
    COL.AlertMessage AS 'Alert Text',
    COB.ParentIdLevel1 AS 'Parent Option',
    COB.ParentIdLevel2 AS 'Parent Option 1',
    COB.ParentIdLevel3 AS 'Parent Option 2',
    COB.ParentIdLevel4 AS 'Parent Option 3',
    FL.Name AS 'Category Name',
    EL.SingularText AS 'Entity'
FROM dbo.rCategoryOptionLiteral AS COL
INNER JOIN dbo.CategoryOptionBase AS COB ON COB.Id = COL.ObjectId AND COL.Locale = @Locale
INNER JOIN dbo.FieldLiteral AS FL ON FL.ObjectId = COB.FieldId AND FL.Locale = @Locale
INNER JOIN dbo.FieldBase AS FB ON FB.Id = FL.ObjectId
INNER JOIN dbo.EntityBase AS EB ON EB.Id = FB.EntityId
INNER JOIN dbo.EntityLiteral AS EL ON EL.ObjectId = EB.Id AND EL.Locale = @Locale
WHERE COB.FieldId = @FieldId
  AND COB.ParentOptionId IS NULL;

我的问题是四个ParentIdLevel列中的数据可能是NULL,基本上我需要在输出中将NULL显示为空白。但是,由于ParentIdLevel列在我的CategoryOptionBase表格中的类型为unqiueidentifier,因此如果它们是NULL,则我很难将其显示为空白。我尝试了COALESE函数,但这对我没用。

2 个答案:

答案 0 :(得分:3)

您必须将uniqueidentifier转换为字符串类型。

isnull(convert(char(36),COB.ParentIdLevel1),'') as 'Parent Option',
isnull(convert(char(36),COB.ParentIdLevel2),'') as 'Parent Option 1',
isnull(convert(char(36),COB.ParentIdLevel3),'') as 'Parent Option 2',
isnull(convert(char(36),COB.ParentIdLevel4),'') as 'Parent Option 3',

答案 1 :(得分:1)

替换值必须与列的数据类型相同。如果要为非字符数据类型返回null值的空字符串,可以将该列转换为函数内的字符数据类型。

您可以在sql server中使用isnull()coalesce()

select isnull(convert(varchar(36),col),'') as ...

如果col为空,则返回空字符串。

select coalesce(convert(varchar(36),col),'') as ...

如果col为空,这也会返回一个空字符串。

两者之间的主要区别在于coalesce()可以支持2个以上的参数,并选择第一个不是null的参数。两者之间的差异更大answered here.

select coalesce(col,col2,'')

coalesce()也是标准ANSI sql,因此它在大多数RDBMS中都可用,而isnull()特定于sql server。

参考:

相关问题