我有一个包含这个的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个空格)。
答案 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;