– 原始声明
SELECT FirstName + ' ' + LastName + ' '+ ISNULL(MI + '.', '') As MiddleInitial
FROM CS_tblMaster WHERE CustomerNo = 2627240
– 我的原始答案(已编辑)
SELECT FirstName + ' ' + LastName + ' '+ (ISNULL(MI, '') + '.') As MiddleInitial
FROM CS_tblMaster WHERE CustomerNo = 2627240
在这种情况下,SQL 将首先检查 MI 是否为 Null,如果 Not Null 则使用 MI,如果是则使用空字符串。然后它将这个结果(现在永远不会为 Null)与句点连接起来。
– 最终答案
SELECT
FirstName + ' ' + LastName + ' '
+ CASE WHEN MI IS NULL THEN '' ELSE MI + '.' END As MiddleInitial
FROM CS_tblMaster WHERE CustomerNo = 2627240
@Satish,由于您还没有选择一个,因此不确定您是否觉得自己有答案,如果我的答案简短而快速,我深表歉意。看到所有的回答让我意识到当我第一次看到你的问题时,我并没有考虑太多。
为了回答“我想了解这个实现”,Null 在 SQL 中是一个完全特殊的值。不是空字符串,不是空格,不是零。它们在更字面意义上的意思是“无”。你可以检查它们,看看有没有什么东西是空的。但是你不能用 Null 来“做”事情。所以 57 + 空 = 空。'玛丽' + 空 = 空。((12 *37) +568) / 空 = 空。'Albert'、'Mary'、Null 和 'Zeke' 的 Max() 为 Null。这篇文章http://en.wikipedia.org/wiki/Null_(SQL)可能会有所帮助,在 Null Propagation 部分有一个不错的描述。
Isnull 函数与其说是对 Null 的测试,不如说是一种处理它的方法。因此,要测试某些内容是否为 Null,您将在 Select 中使用 ColumnName Is Null 或 ColumnName Is Not Null。Isnull(MI,'') 说的是:我想要一个值,如果 MI 的值不为 null,那么我想要 MI,否则我想要一个空字符串。
继续,我不确定我最初是否理解你实际上想要做什么。如果您想获得中间首字母为空的时间段,那么我的原始答案和其他大多数答案都对您有用。但我想你可能想说:如果我有一个中间名首字母,那么我想要中间名首字母后跟一个句号。如果我没有中间名首字母,那么我什么都不想要:“Alberto C. Santaballa”或“Alberto Santaballa”,从不“Alberto”。圣巴拉”。如果是这种情况,则在编辑后的答案中使用最后的陈述。
@Zec,感谢您的编辑。错字是打字太快的另一个产物!:-/