SSRS。 FirstName和LastName之间的额外空间

时间:2015-12-10 15:32:11

标签: reporting-services ssrs-2008 report ssrs-2012

我有报告显示名称(FirstName MiddleName LastName)。当name具有MiddleName时,每个字段之间都有一个空格并且效果很好。但是,当MiddleName为NULL时,空间将在FirstName和LastName之间呈现。解决这个问题的最佳方法是什么? 我尝试过类似的东西:

=Fields!FirstName.Value & "" & iif (isNothing(Fields!MiddleName.Value), "", Fields!MiddleName.Value) & "" & Fields!LastName.Value

2 个答案:

答案 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