【发布时间】:2010-09-21 15:32:52
【问题描述】:
Oracle SQL 中的字符串连接运算符是什么?
有什么“有趣”的功能我应该注意的吗?
(这似乎很明显,但我找不到以前的问题问它)。
【问题讨论】:
标签: sql oracle plsql string-concatenation
Oracle SQL 中的字符串连接运算符是什么?
有什么“有趣”的功能我应该注意的吗?
(这似乎很明显,但我找不到以前的问题问它)。
【问题讨论】:
标签: sql oracle plsql string-concatenation
在连接两个以上的字符串时,使用CONCAT(CONCAT(,),) 对我有用。
我的问题需要使用日期字符串(仅)并从YYYY-MM-DD 创建YYYYMMDD,如下所示(即不转换为日期格式):
CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD
【讨论】:
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
【讨论】:
我建议在处理 2 个字符串时使用 concat 和 ||当这些字符串超过 2 个时:
select concat(a,b)
from dual
或
select 'a'||'b'||'c'||'d'
from dual
【讨论】:
concat(a,b) 而不是 a||b?
是||,例如:
select 'Mr ' || ename from emp;
我能想到的唯一“有趣”的功能是 'x' || null 返回 'x',而不是您可能期望的 null。
【讨论】:
|| 在 Oracle 中不是逻辑运算符,因此,'x'||null 返回x。
AND、NOT 等运算符,那么|| 当然不是逻辑运算符。但是 'x'||null 返回 x 有什么关系呢? n+null 返回 null,+ 也是逻辑运算符吗?
还有concat,不过用的不多
select concat('a','b') from dual;
【讨论】:
CONCAT 也兼容其他 DBMS(至少 MySQL 和 Postgres)。
nvl()。)
CONCAT 也是available in Microsoft SQL Server 2012 and onwards。 CONCAT 虽然是非标准的,但如果您希望您的代码具有可移植性,它绝对是您的必经之路。 (|| 是实际的 ANSI 标准运算符,尽管您不会通过查看对它的支持来了解它!)