我有报告显示名称(FirstName MiddleName LastName)。当name具有MiddleName时,每个字段之间都有一个空格并且效果很好。但是,当MiddleName为NULL时,空间将在FirstName和LastName之间呈现。解决这个问题的最佳方法是什么? 我尝试过类似的东西:
=Fields!FirstName.Value & "" & iif (isNothing(Fields!MiddleName.Value), "", Fields!MiddleName.Value) & "" & Fields!LastName.Value
答案 0 :(得分:0)
使用当前表达式,应该没有空格。如果当前有任何空格,则它们必须存在于您的数据库中...这可以通过在FirstName,MiddleName,LastName上使用TRIM来确认。
要正确格式化字符串,您需要在""
之间使用空格,并确保中间名后面的空格包含在iif语句中
=TRIM(Fields!FirstName.Value) & " " &
iif (isNothing(TRIM(Fields!MiddleName.Value)),
"",
TRIM(Fields!MiddleName.Value) & " ")
& TRIM(Fields!LastName.Value)
答案 1 :(得分:0)
首先,上面的表达式不会返回带空格的名称。
我认为你的意思是这样的空间:
=Fields!FirstName.Value & " " & iif (isNothing(Fields!MiddleName.Value), " ", Fields!MiddleName.Value) & " " & Fields!LastName.Value
除了Jonnus的回答,您还可以使用'Len'
来检查其长度。
如果您只担心MiddleName,可以使用Len
来使用此表达式=Fields!FirstName.Value & " " & IIF(Len(Fields!MiddleName.Value) < 1,"", Fields!MiddleName.Value) & " " & Fields!LastName.Value
但是,如果我是你,我宁愿使用sql函数来处理这个问题,而不是在表达式中进行处理。我还可以将其重复用于其他报告,而不是再次重复表达。
这是一个函数示例,它返回一个带有格式中间名的全名。
IF EXISTS (
SELECT *
FROM dbo.sysobjects
WHERE ID = OBJECT_ID(N'[dbo].[GetClientFullNameWithMiddleName]') AND
xtype in (N'FN', N'IF', N'TF'))
DROP FUNCTION [dbo].[GetClientFullNameWithMiddleName]
GO
CREATE FUNCTION [dbo].[GetClientFullNameWithMiddleName](@ClientID UNIQUEIDENTIFIER)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @FULLNAME NVARCHAR(MAX)
DECLARE @LASTNAME NVARCHAR(MAX)
DECLARE @FIRSTNAME NVARCHAR(MAX)
DECLARE @MIDDLENAME NVARCHAR(MAX)
SET @LASTNAME = ISNULL((SELECT Lastname FROM Client WHERE ClientID = @ClientID),'')
SET @FIRSTNAME = ISNULL((SELECT Firstname FROM Client WHERE ClientID = @ClientID),'')
SET @MIDDLENAME = ISNULL((SELECT Middlename FROM Client WHERE ClientID = @ClientID),'')
IF(@ClientID <> '00000000-0000-0000-0000-000000000000')
BEGIN
IF(@FIRSTNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FIRSTNAME) AS NVARCHAR(MAX))
IF(@MIDDLENAME <> '' AND @FULLNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FULLNAME + ' ' + @MIDDLENAME) AS NVARCHAR(MAX))
END
IF(@LASTNAME <> '' AND @FULLNAME <> '')
BEGIN
SET @FULLNAME = CAST((@FULLNAME + ' ' + @LASTNAME) AS NVARCHAR(MAX))
END
END
ELSE
BEGIN
SET @FULLNAME = CAST((@FIRSTNAME)AS NVARCHAR(MAX))
END
END
ELSE
BEGIN
SET @FULLNAME = ''
END
RETURN @FULLNAME
END
GO
然后你可以像这样使用它
SELECT
[dbo].[GetClientFullNameWithMiddleInitial](ClientID)
FROM Client