【问题标题】:How to concate fields without using CONCAT() [duplicate]如何在不使用 CONCAT() 的情况下连接字段 [重复]
【发布时间】:2019-09-06 15:50:30
【问题描述】:

由于某种原因,我无法将 sql 表中的名字和姓氏组合在一起。

这是我尝试过的:

SELECT firstname, lastname, firstname + ' ' + lastname as fullname from students;

由于某种原因,它在全名下的每一行的结果中显示为“0”,但是名字和姓氏列是正常填充的。

请帮忙。 ***请注意,我不想使用 CONCAT() 函数

此处的屏幕截图: table

提前致谢

【问题讨论】:

  • ANSI SQL 有|| 用于连接。
  • 对了,为什么不用 concat 呢?
  • “他们在副本中使用 concat” 他们还提到了 MySQL 中的PIPES_AS_CONCAT SQL 模式,它允许 ANSI SQL 字符串连接 (||) 运算符@ Cid which jarth 也提到了
  • @RaymondNijland 祝你好运移除 W3School :-)
  • “祝你好运移除 W3School” 为什么它有什么问题......?? @Cib 我想如果我转过身来问什么是正确的,你做得更快:-)

标签: mysql sql


【解决方案1】:

您正在尝试添加两个字符串。那没有意义。虽然一些(好吧,真的是一个,鉴于 SQL Server 基于 Sybase)数据库重载 + 表示字符串连接,但正确的做法是:

concat(firstname, ' ', lastname) as fullname

或者我更喜欢,因为它可以干净地处理 NULL 值:

concat_ws(' ', firstname, lastname) as fullname

或在支持 ISO/ANSI 运算符的数据库中:

(firstname || ' ' || lastname ) as fullname

这在 MySQL 中不起作用,除非您设置了模式 PIPES_AS_CONCAT(参见 here)。

在 MySQL 中,您将获得 0,因为 + 被视为加法,并且两个字符串(静默)转换为数字,基于前导数字。因为都以非数字开头,所以都转换为0

【讨论】:

【解决方案2】:

只是一个猜测,但也许您的 SQL 版本使用|| 作为连接运算符:

SELECT
    firstname,
    lastname,
    firstname || ' ' || lastname AS fullname
FROM students;

您看到零的原因可能是因为数据库将字符串列转换为数字,以使 + 运算符有意义。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 2022-07-01
    • 2014-02-22
    • 2020-09-16
    • 2017-12-21
    • 2019-05-21
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多