【问题标题】:What is the string concatenation operator in Oracle?Oracle中的字符串连接运算符是什么?
【发布时间】:2010-09-21 15:32:52
【问题描述】:

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

有什么“有趣”的功能我应该注意的吗?

(这似乎很明显,但我找不到以前的问题问它)。

【问题讨论】:

标签: sql oracle plsql string-concatenation


【解决方案1】:

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

我的问题需要使用日期字符串(仅)并从YYYY-MM-DD 创建YYYYMMDD,如下所示(即不转换为日期格式):

CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD

【讨论】:

    【解决方案2】:
    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

    【讨论】:

      【解决方案3】:

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

      select concat(a,b)
        from dual
      

        select 'a'||'b'||'c'||'d'
              from dual
      

      【讨论】:

      • 对不起,我知道这是 2 年前的事了,但为什么你更喜欢 concat(a,b) 而不是 a||b
      • ||更短、更灵活、更简单。看看他的 select 语句。
      【解决方案4】:

      ||,例如:

      select 'Mr ' || ename from emp;
      

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

      【讨论】:

      • 我希望逻辑操作为 null...不确定我是否考虑过字符串操作。
      • 当然,Oracle 将 null 和 '' 视为相同,而 'x' || '' = 'x' 是有道理的。但是,如果您将 null 视为“未定义”或“未知”,那么 'x' || null 可以是任何以 'x' 开头的字符串,所以它本身是“未知的”!
      • || 在 Oracle 中不是逻辑运算符,因此,'x'||null 返回x
      • @ipip:我很困惑——如果“逻辑运算符”是指ANDNOT 等运算符,那么|| 当然不是逻辑运算符。但是 'x'||null 返回 x 有什么关系呢? n+null 返回 null,+ 也是逻辑运算符吗?
      • Oracle 在连接中对 null 的处理是非标准的,因为它与 SQL92 规范(和 Postgres)不同 - 请参阅 postgresql.org/message-id/921.1144705646@sss.pgh.pa.us
      【解决方案5】:

      还有concat,不过用的不多

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

      【讨论】:

      • 这比 || 好多了象征。使用 ||就像其他语言对 || 的使用一样令人困惑。
      • 为了清楚起见同意,但是 ||具有轻松允许超过 2 个字段的优势
      • CONCAT 也兼容其他 DBMS(至少 MySQL 和 Postgres)。
      • 奇怪的是,ANSI SQL 委员会没有想到任何人可能需要连接两个以上的东西。 (Oracle 的天才们也是如此,他们提出了nvl()。)
      • CONCAT 也是available in Microsoft SQL Server 2012 and onwards。 CONCAT 虽然是非标准的,但如果您希望您的代码具有可移植性,它绝对是您的必经之路。 (|| 是实际的 ANSI 标准运算符,尽管您不会通过查看对它的支持来了解它!)
      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2010-09-24
      • 2014-02-27
      • 2010-09-09
      • 2016-07-19
      • 2010-09-21
      相关资源
      最近更新 更多