【问题标题】:How to concatenate strings in a Select statement in MySQL如何在 MySQL 的 Select 语句中连接字符串
【发布时间】:2023-03-23 09:47:01
【问题描述】:

我必须使用 MySQL 数据库中的数据在 SQL Server 中运行查询。当我需要做相反的事情时,我找到了一种简单的方法来完成我需要使用 SQL Server 中的 select 语句编写更新查询。

我在 SQL Server 中写道:

SELECT 'update sgidb.Example set MySQLCol1 = ' + cast(MSSQLCol1 as varchar(max)) + ' where MySQLCol2 = ' + cast(MSSQLCol2 as varchar(max)) + ';' FROM MSSQLTable

这导致了一堆带有我需要的键的更新语句:

'update sgidb.Example set MySQLCol1 = 12 where MySQLCol2 = 45;

但是当我尝试在 MySQL 中做同样的事情时,我遇到了一堆语法错误。网络告诉我 MySQL 不需要 + 运算符来连接句子中的字符串,但它不起作用,也没有显式地编写连接函数。有什么想法吗?

【问题讨论】:

  • 使用concat会发生什么
  • 无法使 concat(cast(MSSQLCol1 as varchar(max)), 'etctera') 工作
  • 好吧,也许发布该代码并出现错误 - 因为“无法正常工作”并不能告诉我们出了什么问题。
  • 在 SQL Server 中也可以进行 CONCAT 函数。 SELECT CONCAT('update sgidb.Example set MySQLCol1 = ' , MSSQLCol1 , ' where MySQLCol2 = ' , MSSQLCol2 , ';' )FROM MSSQLTable

标签: mysql sql-server database


【解决方案1】:

您可以使用 MySQL 和 SQL 中可用的 CONCAT 函数,如下所示:

SELECT CONCAT('update sgidb.Example set MySQLCol1 = ' , MSSQLCol1 , ' where MySQLCol2 = ' , MSSQLCol2 , ';' )FROM MSSQLTable

现在在上述解决方案中,您需要注意语句前后甚至语句前后的空格。

为了解决上述情况,您可以使用函数 CONCAT_WS,它在 MySQL 和 SQL 中都可用:

SELECT CONCAT_WS(' ', 'update sgidb.Example set MySQLCol1 =' , MSSQLCol1 , 'where MySQLCol2 =' , MSSQLCol2 , ';' )FROM MSSQLTable

CONCAT_WS 函数将两个或多个字符串与分隔符相加。

现在不再需要处理为避免语法错误而需要放置的空格了。

请注意,CONCAT_WS 也将处理 null。但在 CONCAT 的情况下,如果任何变量/字段为 null,则整个 CONCATATENATED 结果变为 null。

【讨论】:

  • 不错,CONCAT_WS 也处理 null 值。非常适合同时提供两种选择。
  • 您能否接受这个答案并投票。非常感谢!
【解决方案2】:

你可以这样做

SELECT concat("update sgidb.Example set MySQLCol1 = ",MSSQLCol1,"where MySQLCol2 = ",MSSQLCol2,";") FROM MSSQLTable;

【讨论】:

    【解决方案3】:

    SQL Server 和 mysql 都有 CONCAT 函数。

    您可以在两个 RDBMS 中使用以下查询。

    SELECT CONCAT('update sgidb.Example set MySQLCol1 = ' , MSSQLCol1 , ' where MySQLCol2 = ' , MSSQLCol2 , ';' )FROM MSSQLTable
    

    【讨论】:

      【解决方案4】:

      您可以尝试concat 连接您的字符串。

      例如:

      SELECT CONCAT('MySQL CAST example #',CAST(2 AS CHAR));
      
      #ouput
      MySQL CAST example #2
      

      在您的上述更新查询中,您的 setwhere 列可能包含 varchar,但如果您仔细查看查询,则两个列名中都缺少 '。请尝试以下查询。

      SELECT CONCAT('update sgidb.Example set MySQLCol1 = ''', 
                      CAST(MSSQLCol1 AS VARCHAR(MAX)), 
                      ''' where MySQLCol2 = ''', 
                      CAST(MSSQLCol2 AS VARCHAR(MAX)) , 
                      ''';' ) 
      FROM MSSQLTable;
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        相关资源
        最近更新 更多