Qual è l'operatore di concatenazione di stringhe in Oracle?


Risposte:


237

Ad ||esempio:

select 'Mr ' || ename from emp;

L'unica caratteristica "interessante" a cui riesco a pensare è che 'x' || nullritorni'x' , non nullcome forse ti aspetteresti.


3
Mi aspetterei null da un'operazione logica ... non sono sicuro di aver mai pensato a un'operazione di stringa.

1
Beh, ovviamente Oracle considera null e '' come gli stessi, e 'x' || '' = 'x' ha senso. Ma se pensi a null come "indefinito" o "sconosciuto", allora 'x' || null potrebbe essere qualsiasi stringa che inizia con 'x' e quindi è "sconosciuto"!
Tony Andrews,

4
||in Oracle non è un operatore logico, quindi, 'x'||nullritorna x.
Iľja,

3
@ipip: sono confuso - se per "operatore logico" intendi operatori come AND, NOTecc. allora ovviamente ||non è un operatore logico. Ma che cosa ha a che fare con il 'x'||nullritorno x? n+nullrestituisce null, quindi è +un operatore logico?
Tony Andrews,

2
La gestione di null di Oracle in concatenazione non è standard in quanto è diversa dalle specifiche SQL92 (e Postgres) - vedi postgresql.org/message-id/921.1144705646@sss.pgh.pa.us
beldaz

61

C'è anche concat, ma non viene molto usato

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

6
questo è molto meglio del || simbolo. usando || è solo confuso secondo l'uso dell'altra lingua di ||
Giordania,

17
Concordato per chiarezza, ma || ha il vantaggio di consentire più di 2 campi facilmente
Patrick Honorez,

3
CONCATè anche compatibile con altri DBMS (almeno MySQL e Postgres).
lapo,

1
Strano che al comitato ANSI SQL non sia venuto in mente che qualcuno potrebbe aver bisogno di concatenare più di due cose. (Lo stesso vale per i geni di Oracle che hanno inventato nvl().)
William Robertson,

1
CONCATè disponibile anche in Microsoft SQL Server 2012 e versioni successive . CONCAT, sebbene non standard, è sicuramente la strada da percorrere se vuoi che il tuo codice sia portatile. ( ||è l'effettivo operatore standard ANSI, anche se non lo sapresti guardando il supporto per questo!)
Matt Gibson

11

Suggerirei concat quando si tratta di 2 stringhe e || quando quelle stringhe sono più di 2:

select concat(a,b)
  from dual

o

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

2
dispiace Mi rendo conto che questo è stato 2 anni fa, ma il motivo per cui si preferisce concat(a,b)sopra a||b?
Tony Andrews,

|| più breve, più flessibile e semplice. Guarda la sua dichiarazione selezionata.
JoshYates1980,

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;

uscita :: Abc def


1

L'utilizzo ha CONCAT(CONCAT(,),)funzionato per me durante la concatenazione di più di due stringhe.

Il mio problema richiesto lavorare con stringhe di data (solo) e la creazione YYYYMMDDda YYYY-MM-DDcome segue (cioè senza conversione al formato della data):

CONCAT(CONCAT(SUBSTR(DATECOL,1,4),SUBSTR(DATECOL,6,2)),SUBSTR(DATECOL,9,2)) AS YYYYMMDD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.