SQL - Concat全名,仅当姓氏存在时才有空格

时间:2016-07-07 17:45:32

标签: sql postgresql concat

我目前正在连接这样的第一个和最后一个名字(使用PostgreSQL):

concat(customers.firstname, ' ', customers.lastname)

我在这里遇到的问题是我的客户只是用名字输入(即“罗纳尔多”)。上面的查询将返回“Ronaldo”,但不匹配。

我可以使用我的服务器端语言来检查尾随空格,但如果我的数据库中的某个客户意外输入了一个尾随空格(即“哈利波特”),那么我就不会匹配那个。

我正在寻找将返回“罗纳尔多”,“约翰史密斯”和“哈利波特”的SQL。所以基本上我想在名字不等于“”(空字符串)的情况下在名字和姓氏之间加一个空格。如果lastname是“”(空字符串),那么我希望在名字后面没有空格。这只能用SQL吗?或者我是否必须弄清楚如何使用服务器端语言对其进行适当解析?

4 个答案:

答案 0 :(得分:3)

您可以使用TRIM() function调用来删除任何前导或尾随空格:

TRIM(CONCAT(customers.firstname, ' ', customers.lastname))

TRIM()还允许您使用以下语法特定要删除的字符以及字符串中的位置(即开头,结尾,两者等):

TRIM([LEADING | TRAILING | BOTH] [characters] FROM YourColumnOrString)

答案 1 :(得分:1)

我用这个:

trim(both from COALESCE(firstname, '') || ' ' || COALESCE(lastname, '')

如果名字和姓氏都可以为空。

答案 2 :(得分:0)

这对我有用:

case
  when customers.lastname = ''
    then customers.firstname
  else
    concat(customers.firstname, ' ', customers.lastname)
end

案例文档:https://www.postgresql.org/docs/7.4/static/functions-conditional.html

特别感谢daf

答案 3 :(得分:0)

试试这个...... 这将删除所有(开始和结束)空格

SELECT RTRIM(CONCAT(LTRIM(RTRIM(First_Name)) , ' ' , LTRIM(RTRIM(Last_Name)))) 
AS 'Full_Name'
FROM tableName;

如果你还想插入中间名,你可以试试这样的......

SELECT (RTRIM(LTRIM(RTRIM(First_Name)) + ' ' + LTRIM(RTRIM(Middle_Name))) + ' ' + LTRIM(RTRIM(Last_Name))) 
AS 'Full_Name'
FROM tableName;