【问题标题】:String concatenation in MySQLMySQL中的字符串连接
【发布时间】:2011-08-23 23:23:14
【问题描述】:

我正在使用 MySQL 和 MySQL Workbench 5.2 CE。当我尝试连接 2 列 last_namefirst_name 时,它不起作用:

select first_name + last_name as "Name" from test.student

【问题讨论】:

    标签: mysql mysql-workbench concat


    【解决方案1】:

    MySQL 不同于大多数 DBMS 使用 +|| 进行连接。它使用CONCAT 函数:

    SELECT CONCAT(first_name, ' ', last_name) AS Name FROM test.student
    

    还有CONCAT_WS(Concatenate With Separator)函数,它是CONCAT()的特殊形式:

    SELECT CONCAT_WS(' ', first_name, last_name) from test.student
    

    也就是说,如果您想将|| 视为字符串连接运算符(与CONCAT() 相同)而不是MySQL 中OR 的同义词,您可以设置PIPES_AS_CONCAT SQL 模式。

    【讨论】:

    • 更好的答案,说明 MySQL 不使用连接运算符。
    • 对于那些使用Doctrine 的人,我必须对CONCAT 中的空格使用单引号,并在整个查询中使用双引号。
    • 设置PIPES_AS_CONCAT:SET @@SQL_MODE = CONCAT(@@SQL_MODE, ',PIPES_AS_CONCAT');。要取消设置:SET @@SQL_MODE = REPLACE(@@SQL_MODE, 'PIPES_AS_CONCAT', '');。更多示例mariadb.com/kb/en/library/sql-mode/#examples
    【解决方案2】:

    试试:

    select concat(first_name,last_name) as "Name" from test.student
    

    或者,更好:

    select concat(first_name," ",last_name) as "Name" from test.student
    

    【讨论】:

      【解决方案3】:

      像这样使用concat() 函数而不是+

      select concat(firstname, lastname) as "Name" from test.student
      

      【讨论】:

        【解决方案4】:

        这不是在 MYSQL 中连接的方式。使用CONCAT函数看这里:http://dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_concat

        【讨论】:

          【解决方案5】:

          除了concat,你还可以使用concat_ws(用分隔符连接):

          SELECT CONCAT_WS(' ', first_name, last_name) from test.student

          此函数具有跳过null 值的额外好处。

          https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_concat-ws

          【讨论】:

            猜你喜欢
            • 2013-12-14
            • 2014-03-31
            • 2016-04-26
            • 2022-09-30
            • 1970-01-01
            • 2011-08-31
            • 2014-10-28
            • 1970-01-01
            相关资源
            最近更新 更多