Mysql 在第一、中间和最后

Mysql 在第一、中间和最后,mysql,Mysql,我有一个包含以下内容的SQL: CONCAT( tblpeople.FirstName , ' ' , IF( tblpeople.Middle <> '' , tblpeople.Middle , '' ) , ' ' , tblpeople.LastName , IF( tblpeople.NameSuffix <> '' , Conca

我有一个包含以下内容的SQL:

CONCAT(
        tblpeople.FirstName ,
        ' ' ,

    IF(
        tblpeople.Middle <> '' ,
        tblpeople.Middle ,
        ''
    ) ,
    ' ' ,
    tblpeople.LastName ,

IF(
    tblpeople.NameSuffix <> '' ,
    Concat(', ' , tblpeople.NameSuffix) ,
    ''
)
    ) AS `Name` ,
CONCAT(
tblpeople.FirstName,
' ' ,
如果(
TBL人。中间“,
TBL人,中间,
''
) ,
' ' ,
tblpeople.LastName,
如果(
TBLPeope.NameSuffix“”,
Concat(',',tblpeople.NameSuffix),
''
)
)作为'Name`,
问题是,如果中间字段为Null或“”则会插入一个空格,因此带有Null的名称如下所示: FirstName\u LastName(两个空格)。

试试这个

concat_ws(' ',FirstName,MiddleName,LastName) as Name;
您还可以根据需要更改顺序,也可以阅读有关concat_ws()函数的内容

concat_ws(' ',FirstName,MiddleName,LastName) as Name;

您还可以根据自己的意愿更改顺序。您还可以阅读有关concat_ws()函数的内容。MySQL有一个简洁的内置函数,可以通过跳过
null
s为您完成大部分繁重的工作:

CONCAT_WS(' ', FirstName, Middle, LastName)
但是,它不会跳过空字符串,因此您必须明确地处理它,例如,使用
大小写
表达式:

CONCAT_WS(' ',
          CASE FirstName WHEN '' THEN NULL ELSE FirstName END,
          CASE Middle    WHEN '' THEN NULL ELSE Middle END,
          CASE LastName  WHEN '' THEN NULL ELSE LastName END)

MySQL有一个简洁的内置函数,可以通过跳过
null
s为您处理大部分繁重的工作:

CONCAT_WS(' ', FirstName, Middle, LastName)
但是,它不会跳过空字符串,因此您必须明确地处理它,例如,使用
大小写
表达式:

CONCAT_WS(' ',
          CASE FirstName WHEN '' THEN NULL ELSE FirstName END,
          CASE Middle    WHEN '' THEN NULL ELSE Middle END,
          CASE LastName  WHEN '' THEN NULL ELSE LastName END)

我相信这会有帮助

    Replace(CONCAT(
            tblpeople.FirstName ,
            ' ' ,

        IF(
            tblpeople.Middle <> '' ,
            tblpeople.Middle ,
            ''
        ) ,
        ' ' ,
        tblpeople.LastName ,

    IF(
        tblpeople.NameSuffix <> '' ,
        Concat(', ' , tblpeople.NameSuffix) ,
        ''
    )
        ),'  ',' ') AS `Name` 
替换(CONCAT(
tblpeople.FirstName,
' ' ,
如果(
TBL人。中间“,
TBL人,中间,
''
) ,
' ' ,
tblpeople.LastName,
如果(
TBLPeope.NameSuffix“”,
Concat(',',tblpeople.NameSuffix),
''
)
),'','')作为'Name'

我相信这会有所帮助

    Replace(CONCAT(
            tblpeople.FirstName ,
            ' ' ,

        IF(
            tblpeople.Middle <> '' ,
            tblpeople.Middle ,
            ''
        ) ,
        ' ' ,
        tblpeople.LastName ,

    IF(
        tblpeople.NameSuffix <> '' ,
        Concat(', ' , tblpeople.NameSuffix) ,
        ''
    )
        ),'  ',' ') AS `Name` 
替换(CONCAT(
tblpeople.FirstName,
' ' ,
如果(
TBL人。中间“,
TBL人,中间,
''
) ,
' ' ,
tblpeople.LastName,
如果(
TBLPeope.NameSuffix“”,
Concat(',',tblpeople.NameSuffix),
''
)
),'','')作为'Name'

如上所述,
CONCAT\u WS
单独使用空字符串会给您带来问题。我发现这比添加几个案例陈述要简洁一些:

CONCAT_WS(' ', FirstName, NULLIF(MiddleName, ''), NULLIF(LastName, '')) AS Name;

如上所述,
CONCAT_WS
单独使用空字符串会给您带来问题。我发现这比添加几个案例陈述要简洁一些:

CONCAT_WS(' ', FirstName, NULLIF(MiddleName, ''), NULLIF(LastName, '')) AS Name;