SQL SERVER - 需要帮助。我知道你可以做isnull,但是有没有?没有?

时间:2015-10-29 06:23:59

标签: sql-server

set DisplayName = concat(Title, ' ', FirstName, ' ', substring(MiddleName), 0, 2), '. ', LastName, ' ', Suffix)

所以,有些名称带有后缀(标题,名称中间名称,所以没有中间名。 我想要它,因为它设置显示名称,如果它有一个Tittle和一个中间名称,而不是提供空间和中间名称的句点。现在它包含null作为空格,所以现在如果没有标题我会得到一个额外的空格,如果没有中间的初始值我会得到一个句号/空格;当Middlename和Title的值不为空时我只想要它

3 个答案:

答案 0 :(得分:3)

这是一个标准技巧:

SELECT  CONCAT(ISNULL('Title' + ' ', ''), 'FirstName', ' ', ISNULL(SUBSTRING('MiddleName', 1, 2) + '. ', ''), 'LastName', ' ', 'Suffix')
SELECT  CONCAT(ISNULL(NULL + ' ', ''), 'FirstName', ' ', ISNULL(NULL + '. ', ''), 'LastName', ' ', 'Suffix')

输出:

Title FirstName Mi. LastName Suffix
FirstName LastName Suffix

要应用于您的示例:

SET DisplayName = CONCAT(ISNULL(Title + ' ', ''), 
                         FirstName, 
                         ' ', 
                         ISNULL(SUBSTRING(MiddleName, 0, 2) + '. ', ''),
                         LastName, 
                         ' ', 
                         Suffix)

答案 1 :(得分:1)

SET displayname = concat(title+' '
, firstname, ' '
, substring(middlename, 0, 2) + '. '
, lastname
, ' ' + suffix) 

所以我们在这里做的是使用'+' operator代替CONCAT。不同之处在于,如果NULL使用'+' operator进行联接,则会返回NULL作为结果。因此,如果一个空格将与NULL结果连接起来,比如中间名,那么整个内容将变为NULL,并且不会显示任何空格。

答案 2 :(得分:1)

如果只为用户界面创建DisplayName,那么我认为你可以在你的商务层中做到 - 而不是sql查询

将sql查询的所有结果放在数组或列表中。然后只连接空字符串,它们之间有空格 例如,可以在其他.NET Framework语言中使用的C#代码方法

string[] names = {Title, FirstName, MiddleName, LastName, Suffix}
string DisplayName = string.Join(" ", names.Where((value) => String.IsNullOrWhiteSpace(value) == false);