Oracle中的字符串连接运算符是什么?

AJ.*_*AJ. 165 sql oracle plsql string-concatenation

Oracle SQL中的字符串连接运算符是什么?

我应该注意哪些"有趣"功能?

(这似乎很明显,但我找不到先前提出的问题).

Ton*_*ews 223

这是||,例如:

select 'Mr ' || ename from emp;
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一"有趣"功能是'x' || null回报'x',而不是null你可能想到的.

  • Oracle中的`||`不是逻辑运算符,因此`'x'|| null`返回`x`. (4认同)
  • 我希望逻辑操作为null ...不确定我是否曾想过字符串操作. (3认同)
  • @ipip:我很困惑 - 如果用"逻辑运算符"表示运算符如"AND","NOT"等,那么当然`||`不是逻辑运算符.但是,'x'|| null`返回`x`会导致什么呢?`n + null`返回null,所以`+`是逻辑运算符? (3认同)
  • 当然,Oracle 将 null 和 '' 视为相同,而 'x' || '' = 'x' 有道理。但如果您将 null 视为“未定义”或“未知”,那么 'x' || null 可以是任何以 'x' 开头的字符串,因此它本身是“未知的”! (2认同)
  • Oracle 在连接中对 null 的处理是非标准的,因为它与 SQL92 规范(和 Postgres)不同 - 请参阅 http://www.postgresql.org/message-id/921.1144705646@sss.pgh.pa.us (2认同)

Gar*_*ers 58

还有concat,但它没有得到太多使用

select concat('a','b') from dual;
Run Code Online (Sandbox Code Playgroud)

  • 同意清楚,但|| 有利于容易地允许超过2个字段 (15认同)
  • 这比||更好 符号.使用|| 只是混淆其他语言使用||. (6认同)
  • `CONCAT`也与其他DBMS(至少MySQL和Postgres)兼容. (3认同)
  • `CONCAT` 也[在 Microsoft SQL Server 2012 及更高版本中可用](https://msdn.microsoft.com/en-us/library/hh231515.aspx)。CONCAT 虽然不是标准的,但如果您希望代码可移植,那么它绝对是您的最佳选择。(`||` 是实际的 ANSI 标准运算符,尽管您不会通过查看对它的支持来知道它!) (2认同)

Fab*_*oni 9

在处理2个字符串和||时,我建议使用concat 当这些字符串超过2时:

select concat(a,b)
  from dual
Run Code Online (Sandbox Code Playgroud)

要么

  select 'a'||'b'||'c'||'d'
        from dual
Run Code Online (Sandbox Code Playgroud)

  • 对不起我意识到这是2年前,但为什么你更喜欢`concat(a,b)`over a a || b`? (2认同)

Dul*_*sta 6

有两种方法可以连接字符串Oracle SQL。使用CONCAT函数或||运算符。

CONCAT函数允许您将两个字符串连接在一起

SELECT CONCAT( string1, string2 ) FROM dual;
Run Code Online (Sandbox Code Playgroud)

因为CONCAT函数只允许您将两个值连接在一起。如果要连接两个以上的值,可以嵌套多个 CONCAT 函数调用。

SELECT CONCAT(CONCAT('A', 'B'),'C') FROM dual;
Run Code Online (Sandbox Code Playgroud)

使用该CONCAT函数的另一种方法是使用|| 操作员

SELECT 'My Name' || 'My Age' FROM dual;
Run Code Online (Sandbox Code Playgroud)


小智 5

DECLARE
     a      VARCHAR2(30);
     b      VARCHAR2(30);
     c      VARCHAR2(30);
 BEGIN
      a  := ' Abc '; 
      b  := ' def ';
      c  := a || b;
 DBMS_OUTPUT.PUT_LINE(c);  
   END;
Run Code Online (Sandbox Code Playgroud)

输出:: Abc def