在SQL Server 2012中使用COALESCE()函数

时间:2018-04-23 15:41:13

标签: sql sql-server

我有以下查询,我在SQL中使用COALESCE()函数。如果它没有在LOOKUP_TABLE的NOTES列中找到任何内容,我希望我的查询返回“No Notes Maintained”文本。如果查询未找到任何值,则返回空白,而不是所需的值。

SELECT 
    COALESCE(CONVERT(NVARCHAR(max), NOTES),'No Notes Maintained') AS NOTES 
FROM
    LOOKUP_TABLE LT
INNER JOIN 
    LOOKUP_VALUE LV ON LT.ID = LV.ID

NOTES列的数据类型为varchar,它可以包含NULL,空值或任何文本字符串,例如 - 这是一个注释。

非常感谢任何帮助。

由于

5 个答案:

答案 0 :(得分:3)

为什么要申请CONVERT(NVARCHAR(max)

这将返回您所需的内容:

CASE WHEN NOTES <> '' THEN NOTES ELSE 'No Notes Maintained' END) AS NOTES

NOTES <> ''包含NULL,空字符串和空格。

答案 1 :(得分:2)

正如评论所建议的那样,如果NOTES列中有空格,则COALESCE不会替换该值,因为它不为空。如果您想将NULL和空格视为同一个事物,即逻辑缺失值,请尝试以下查询:

SELECT
    CONVERT(NVARCHAR(max),
        CASE WHEN COALESCE(REPLACE(NOTES, ' ', ''), '') = ''
             THEN 'No Notes Maintained'
             ELSE NOTES END) AS NOTESNOTES 
FROM LOOKUP_TABLE LT
INNER JOIN LOOKUP_VALUE LV
    ON LT.ID = LV.ID;

答案 2 :(得分:1)

尝试这应该有帮助:

SELECT CASE WHEN ISNULL(CONVERT(NVARCHAR(max), NOTES),'')!='' THEN CONVERT(NVARCHAR(max), NOTES) ELSE'No Notes Maintained' END AS NOTES 
FROM   LOOKUP_TABLE LT
  INNER JOIN LOOKUP_VALUE LV ON LT.ID = LV.ID

答案 3 :(得分:0)

鉴于note字段可以是NULL,空白或空字符串,以下代码应该返回您想要的结果:

SELECT     
    CONVERT( NVARCHAR(MAX), 
    CASE 
        WHEN ISNULL(LTRIM(RTRIM(NOTES), '')) = '' THEN 'No Notes Maintained'
        ELSE NOTES
    END) AS NOTES 
FROM
    LOOKUP_TABLE LT
INNER JOIN 
    LOOKUP_VALUE LV ON LT.ID = LV.ID

答案 4 :(得分:0)

试试这个。

LTRIM

说明:您可以同时使用RTRIMNULLIF()从字符串的两边删除空格。当字符串只有空格时,这将返回一个空字符串值(不是空值)。

然后使用NULLIF()函数,您可以比较两个表达式。如果expr1和expr2相等,则NULL函数返回NULL。否则,它返回expr1。在这种情况下,当字符串为空值时,它将返回NULL,因为它与空字符串进行比较。

最后,当表达式ISNULL()使用SELECT ISNULL(NULLIF(LTRIM(RTRIM(LT.NOTES)), ''), 'No Notes Maintained') FROM LOOKUP_TABLE LT INNER JOIN LOOKUP_VALUE LV ON LT.ID = LV.ID 函数时,您可以返回替代值。

SELECT 
CASE
    WHEN Len(column_name) > 0 THEN column_name -- Covers NULL, Empty Strings and Whitespaces.
    ELSE 'Display Text'
END
FROM TableName;

或者你可以做这样的事情......

SELECT 
CASE
    WHEN Len(LT.NOTES) > 0 THEN LT.NOTES
    ELSE 'No Notes Maintained'
END
FROM 
    LOOKUP_TABLE LT
INNER JOIN 
    LOOKUP_VALUE LV ON LT.ID = LV.ID

在您的情况下,查询将是这样的。

{{1}}