我目前正在连接这样的第一个和最后一个名字(使用PostgreSQL):
concat(customers.firstname, ' ', customers.lastname)
我在这里遇到的问题是我的客户只是用名字输入(即“罗纳尔多”)。上面的查询将返回“Ronaldo”,但不匹配。
我可以使用我的服务器端语言来检查尾随空格,但如果我的数据库中的某个客户意外输入了一个尾随空格(即“哈利波特”),那么我就不会匹配那个。
我正在寻找将返回“罗纳尔多”,“约翰史密斯”和“哈利波特”的SQL。所以基本上我想在名字不等于“”(空字符串)的情况下在名字和姓氏之间加一个空格。如果lastname是“”(空字符串),那么我希望在名字后面没有空格。这只能用SQL吗?或者我是否必须弄清楚如何使用服务器端语言对其进行适当解析?
答案 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;