ChatGPT解决这个技术问题 Extra ChatGPT

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

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

有没有我应该注意的“有趣”功能?

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


V
Vidar S. Ramdal

它是 ||,例如:

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
G
Gary Myers

还有concat,不过用的不多

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

这比 || 好多了象征。使用 ||只是根据其他语言对 || 的使用令人困惑。
为清楚起见同意,但是 ||具有轻松允许超过 2 个字段的优势
CONCAT 还与其他 DBMS(至少 MySQL 和 Postgres)兼容。
奇怪的是,ANSI SQL 委员会没有想到任何人可能需要连接两个以上的东西。 (同样适用于提出 nvl() 的 Oracle 天才。)
CONCAT 也是 available in Microsoft SQL Server 2012 and onwards。 CONCAT 虽然是非标准的,但如果您希望您的代码具有可移植性,绝对是您的必经之路。 (|| 是实际的 ANSI 标准运算符,尽管通过查看对它的支持您不会知道它!)
C
Community

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

select concat(a,b)
  from dual

或者

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

抱歉,我知道这是 2 年前的事了,但您为什么更喜欢 concat(a,b) 而不是 a||b
||更短、更灵活、更简单。看看他的 select 语句。
C
Community
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


G
Grant Shannon

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

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

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

D
Du-Lacoste

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

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

SELECT CONCAT( string1, string2 ) FROM dual;

由于 CONCAT 函数仅允许您将两个值连接在一起。如果您想连接两个以上的值,您可以est 多个 CONCAT 函数 调用。

SELECT CONCAT(CONCAT('A', 'B'),'C') FROM dual;

使用 CONCAT 函数的替代方法是使用 || 运算符

SELECT 'My Name' || 'My Age' FROM dual;