我目前正在像这样连接名字和姓氏(使用 PostgreSQL):
concat(customers.firstname, ' ', customers.lastname)
我遇到的问题是,我的客户只输入了名字(即“罗纳尔多”)。上面的查询将返回“Ronaldo”,但不会匹配。
我可以使用我的服务器端语言来检查尾随空格,但是如果我的数据库中的某处有客户不小心输入了尾随空格(即“哈利·波特”),那么我将不会匹配该空格也有一个。
我正在寻找将返回“Ronaldo”、“John Smith”和“Harry Potter”的 SQL。所以基本上,如果姓氏不等于“”(空字符串),我想在名字和姓氏之间包含一个空格。如果姓氏是“”(空字符串),那么我不希望名字后面有空格。只用 SQL 就可以做到这一点吗?或者我必须弄清楚如何使用服务器端语言适当地解析它?
我用这个:
trim(both from COALESCE(firstname, '') || ' ' || COALESCE(lastname, '')
如果名字和姓氏都可以为空。
这对我有用:
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。
试试这个... 这将删除所有(开始和结束)空格
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;
您可以使用
concat_ws
字符串函数来连接字符串(忽略NULL值),其中第一个参数是分隔符,其余参数是要连接的字符串。请参阅文档SELECT
concat_ws(' ', customers.firstname, NULLIF(customers.lastname, '')) AS fullname
FROM customers
此解决方案应给出以下结果(根据您的要求为 1-3):