我有以下查询,我在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,空值或任何文本字符串,例如 - 这是一个注释。
非常感谢任何帮助。
由于
答案 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
说明:您可以同时使用RTRIM
和NULLIF()
从字符串的两边删除空格。当字符串只有空格时,这将返回一个空字符串值(不是空值)。
然后使用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}}