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


Answers:


236

||例如,它是:

select 'Mr ' || ename from emp;

我能想到的唯一“有趣”功能是'x' || nullreturn 'x',而不是null您可能期望的那样。


3
我期望逻辑运算符为null ...不确定我是否曾考虑过字符串运算。

1
当然,Oracle当然会将null和''视为相同,并将'x'||视为相同。''='x'是有意义的。但是,如果您将null视为“未定义”或“未知”,则使用'x'||。null可以是任何以'x'开头的字符串,因此它本身也是“ unknown”!
托尼·安德鲁斯

4
||在Oracle中不是逻辑运算符,因此'x'||null返回x
伊贾

3
@ipip:我很困惑-如果用“逻辑运算符”来表示像的运算符ANDNOT等等,那当然||不是逻辑运算符。但是,'x'||null归还该归于x什么? n+null返回null,+逻辑运算符也是如此吗?
托尼·安德鲁斯

2
Oracle对串联中null的处理是非标准的,因为它与SQL92规范(和Postgres)不同-请参阅postgresql.org/message-id/921.1144705646@sss.pgh.pa.us
beldaz

61

也有concat,但使用不多

select concat('a','b') from dual;

6
这比||更好 符号。使用|| 就像其他语言使用||一样令人困惑。
jordan

17
为了清楚起见,但|| 具有轻松地允许超过2个场的优势
Patrick Honorez 2014年

3
CONCAT还与其他DBMS(至少MySQL和Postgres)兼容。
lapo 2015年

1
奇怪的是,ANSI SQL委员会没有想到任何人都可能需要连接两个以上的东西。(甲骨文公司的天才们也一样nvl()。)
威廉·罗伯逊

1
CONCAT在Microsoft SQL Server 2012及更高版本中可用。如果您希望代码具有可移植性,那么CONCAT尽管是非标准的,但绝对是必经之路。(||是实际的ANSI标准运算符,尽管您看不到它的支持!)
Matt Gibson


6
DECLARE
     a      VARCHAR2(30);
     b      VARCHAR2(30);
     c      VARCHAR2(30);
 BEGIN
      a  := ' Abc '; 
      b  := ' def ';
      c  := a || b;
 DBMS_OUTPUT.PUT_LINE(c);  
   END;

输出:: Abc def


1

CONCAT(CONCAT(,),)连接两个以上的字符串时,using 对我有用。

需要我的问题,日期字符串(只)工作,并创建YYYYMMDDYYYY-MM-DD如下(即没有转化为日期格式):

CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.