【问题标题】:string concatenation in openqueryopenquery中的字符串连接
【发布时间】:2015-01-28 12:42:57
【问题描述】:

我将 Oracle 服务器链接到我的 SQLServer。在构建连接查询时我遇到了问题。请检查下面的代码。

select * from openquery(OracleConnection,'select CONCAT(CUST_ADD1,'','',CUST_ADD2,'','',CUST_ADD3) from TDSPARTY where CUST_NAME=''DR GEORGE ABRAHAM''')

错误信息:

消息 7357,级别 16,状态 2,第 1 行无法处理对象“选择 CONCAT(CUST_ADD1,'','',CUST_ADD2,'','',CUST_ADD3) 来自 TDSPARTY 其中 CUST_NAME='DR GEORGE ABRAHAM'"。OLE DB 提供程序“MSDASQL”用于 链接服务器“OracleConnection”表示对象具有 没有列或当前用户对此没有权限 对象。

需要输出:CUST_ADD1,CUST_ADD2,CUST_ADD3

【问题讨论】:

    标签: sql oracle oracle11g string-concatenation


    【解决方案1】:

    只需使用concatenation operator ||

    类似-

    select CUST_ADD1||','||CUST_ADD2||','||CUST_ADD3 from...

    更多信息

    CONCAT 函数允许您将两个字符串连接在一起。对于两个以上的字符串,您可以使用嵌套在一起的 MULTIPLE concat。但是,为了简单起见,您可以使用如上所示的连接运算符。

    【讨论】:

      【解决方案2】:

      Oracle 版本的CONCAT() 函数只允许两个参数。所以你可以使用嵌套的CONCAT()s:

      CONCAT(CONCAT(CONCAT(CONCAT(CUST_ADD1,'',''),CUST_ADD2),'',''),CUST_ADD3)
      

      或者你可以使用连接运算符||(实际上是在ANSI SQL标准中定义的,虽然SQL Server不遵守这个标准):

      CUST_ADD1||'',''||CUST_ADD2||'',''||CUST_ADD3
      

      我认为额外的单引号 ' 是因为您正在逃避它们。

      【讨论】:

      • 我不认为 OP 试图逃避单引号。他只是在努力连接三列值
      • 他正在逃避它们 b/c 查询本身作为字符串传递给 openquery() 函数。
      • 为什么要包含双引号?您所需要的只是连接列值以及它们之间的逗号。我错过了什么吗?
      • 我包括了双引号,这样他就可以把我写的东西放到他的函数中。
      • 没有。你不能只用一个单引号来逃避一个单引号。您必须用单引号括起来。
      猜你喜欢
      • 1970-01-01
      • 2014-03-31
      • 2017-04-24
      • 1970-01-01
      • 2018-03-06
      • 2013-12-14
      • 2018-12-18
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多