MySql Concat First,Middle和Last

时间:2016-07-12 17:25:47

标签: mysql

我有一个包含这个的SQL:

CONCAT(
        tblpeople.FirstName ,
        ' ' ,

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

IF(
    tblpeople.NameSuffix <> '' ,
    Concat(', ' , tblpeople.NameSuffix) ,
    ''
)
    ) AS `Name` ,

问题是如果中间字段是空的还是&#34;&#34;它插入一个空格,所以带有null的名称看起来像: FirstName__LastName(2个空格)。

4 个答案:

答案 0 :(得分:0)

试试这个

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

您也可以根据需要更改有关concat_ws()函数

的订单

答案 1 :(得分:0)

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

CONCAT_WS(' ', FirstName, Middle, LastName)

但是,它不会跳过空字符串,因此您必须明确地处理它,例如,使用case表达式:

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)

答案 2 :(得分:0)

我相信这会有所帮助。

    Replace(CONCAT(
            tblpeople.FirstName ,
            ' ' ,

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

    IF(
        tblpeople.NameSuffix <> '' ,
        Concat(', ' , tblpeople.NameSuffix) ,
        ''
    )
        ),'  ',' ') AS `Name` 

答案 3 :(得分:0)

如上所述,仅CONCAT_WS会给您带来一个空字符串问题。我发现这比添加几个CASE语句更简洁:

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