Что такое оператор конкатенации строк в Oracle SQL?
Есть ли какие-нибудь "интересные" особенности, о которых мне следует остерегаться?
(Это кажется очевидным, но я не нашел ответа на предыдущий вопрос).
Что такое оператор конкатенации строк в Oracle SQL?
Есть ли какие-нибудь "интересные" особенности, о которых мне следует остерегаться?
(Это кажется очевидным, но я не нашел ответа на предыдущий вопрос).
Это ||
, например:
select 'Mr ' || ename from emp;
Единственная «интересная» особенность, о которой я могу думать, это то, что 'x' || null
возвращает 'x'
, а не null
, как вы могли бы ожидать.
||
в Oracle не является логическим оператором, поэтому 'x'||null
возвращает x
.
- person Iľja; 27.06.2012
AND
, NOT
и т. д., то, конечно, ||
не является логическим оператором. Но что это должно быть связано с 'x'||null
возвращением x
? n+null
возвращает ноль, так что +
логический оператор?
- person Tony Andrews; 20.07.2012
Также есть concat, но он мало используется
select concat('a','b') from dual;
concat()
||
для ясности.
- person afaulconbridge; 22.07.2013
CONCAT
также совместим с другими СУБД (по крайней мере, MySQL и Postgres).
- person lapo; 13.10.2015
nvl()
.)
- person William Robertson; 15.11.2015
CONCAT
также доступен в Microsoft SQL Server 2012 и более поздних версиях. CONCAT, хотя и нестандартный, определенно подходит, если вы хотите, чтобы ваш код был переносимым. (||
- это фактический стандартный оператор ANSI, хотя вы не узнаете об этом, глядя на его поддержку!)
- person Matt Gibson; 31.03.2016
Я бы посоветовал concat при работе с двумя строками и || когда этих строк больше 2:
select concat(a,b)
from dual
or
select 'a'||'b'||'c'||'d'
from dual
concat(a,b)
a||b
?
- person Tony Andrews; 23.08.2017
DECLARE
a VARCHAR2(30);
b VARCHAR2(30);
c VARCHAR2(30);
BEGIN
a := ' Abc ';
b := ' def ';
c := a || b;
DBMS_OUTPUT.PUT_LINE(c);
END;
output :: Abc def
Использование CONCAT(CONCAT(,),)
сработало для меня при объединении более двух строк.
Моя проблема требовала работы со строками даты (только) и создания YYYYMMDD
из YYYY-MM-DD
следующим образом (т.е. без преобразования в формат даты):
CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD