set DisplayName = concat(Title, ' ', FirstName, ' ', substring(MiddleName), 0, 2), '. ', LastName, ' ', Suffix)
所以,有些名称带有后缀(标题,名称中间名称,所以没有中间名。 我想要它,因为它设置显示名称,如果它有一个Tittle和一个中间名称,而不是提供空间和中间名称的句点。现在它包含null作为空格,所以现在如果没有标题我会得到一个额外的空格,如果没有中间的初始值我会得到一个句号/空格;当Middlename和Title的值不为空时我只想要它
答案 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);