当前位置: 首页 > 知识库问答 >
问题:

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

巫经义
2023-03-14

我目前正在连接这样的名字和姓氏(使用PostgreSQL):

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

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

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

我正在寻找返回“罗纳尔多”、“约翰·史密斯”和“哈利·波特”的SQL。所以基本上,如果姓氏不等于“”(空字符串),我想在名字和姓氏之间包含一个空格。如果姓氏是“”(空字符串),那么我不想在名字后面有空格。只有SQL可以吗?或者我必须弄清楚如何使用服务器端语言适当地解析它?

共有3个答案

毕浩渺
2023-03-14

这对我很有效:

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。

夏立果
2023-03-14

我用这个:

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

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

沈华皓
2023-03-14

可以使用函数调用去掉任何前导或尾随空格:

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

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

TRIM([LEADING | TRAILING | BOTH] [characters] FROM YourColumnOrString)
 类似资料:
  • 问题内容: 我有一个客户列表,其名称为全名。我想创建一个将全名作为参数并分别返回名字和姓氏的函数。如果不可能,我可以有两个单独的函数,一个返回名字,另一个返回姓氏。全名列表包含最多三个单词的名称。我想要的是: 全名由两个词组成时。第一个应该是名称,第二个应该是姓氏。 当一个全名由三个词组成时。第一个单词和中间单词应为名字,第三个单词应为姓氏。 例子:- 结果:- 我搜索并找到了无法按预期运行的解决

  • 本文向大家介绍使用JavaScript拆分名字和姓氏?,包括了使用JavaScript拆分名字和姓氏?的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的名称字符串- 使用分割名字和姓氏。以下是代码- 示例 要运行上述程序,您需要使用以下命令- 输出结果 在这里,我的文件名为demo163.js。这将产生以下输出-

  • 问题内容: 我希望根据该文件是否已经存在来写一个文件,仅在不存在的情况下才写(实际上,我希望继续尝试文件,直到找到一个不存在的文件为止)。 下面的代码显示在其中一个潜在的攻击者可以插入一个符号,作为建议的方式这篇文章中该文件的测试和写入的文件之间。如果代码以足够高的权限运行,则可能会覆盖任意文件。 有什么办法解决这个问题? 问题答案: 编辑 :另请参见DaveJones的回答:从Python3.3

  • 我有一个名为FullName的列的模型联系人,其中包含例如“John Smith”。 如何按全名列中显示的姓氏排序数据? 对于像“John Smith Doe”这样的长名称,我想按“Doe”这个词对数据进行排序。我使用postgres db

  • 问题内容: 我有2张桌子- : 第二张桌子- : 我只需要选择未取消的预订(在此示例中仅为ID 3)。我可以轻松地选择带有简单条件的已取消,但由于未在此处取消工作,因此我在努力避免未取消。 问题答案: 要么: 第一个版本更直观,但是我认为第二个版本通常可以获得更好的性能(假设您在联接中使用的列上有索引)。 第二个版本有效,因为返回第一个表中所有行的一行。当条件成功,这些行会包括从第二表中的列,就像

  • 我需要帮助来分别获得名字和姓氏。 字段为[全名]:Halsey S Dunn 我可以单独获得名字,但无法单独获得姓氏: 这是我的名字和姓氏代码: 我的结果需要是: