Operatori di concatenazione nelle espressioni
Quando due operandi stringa vengono concatenati, il risultato dell'espressione è una stringa.
Gli operandi della concatenazione devono essere stringhe compatibili. Una stringa binaria non può essere concatenata con una stringa di caratteri, incluse le stringhe di caratteri definite come FOR BIT DATA (per ulteriori informazioni sulla compatibilità dei tipi di dati, consultare la matrice di compatibilità nella Tabella 1 ). Un tipo distinto basato su un tipo stringa può essere concatenato solo se viene creata un'apposita funzione definita dall'utente.
Sia CONCAT che le barre verticali (||) rappresentano l'operatore di concatenazione. Le barre verticali (o i caratteri che devono essere utilizzati al posto delle barre verticali in alcuni paesi1) possono causare errori di analisi nelle istruzioni passate da un DBMS a un altro. Il problema si verifica se l'istruzione subisce una conversione di caratteri con determinate combinazioni di CCSID1 di origine e di destinazione. Pertanto, CONCAT è l'operatore di concatenazione preferibile.
Se uno dei due operandi può essere nullo, il risultato può essere nullo e se uno dei due è nullo, il risultato è il valore nullo. Altrimenti, il risultato è costituito dalla stringa del primo operando seguita dal secondo.
Se una colonna di operandi dell'
e è |
E l'altro operando dell'
e è |
Il tipo di dati della colonna dei risultati è 1 |
|---|---|---|
| CHAR( x ) | CHAR(y) con un attributo di lunghezza combinata inferiore a 256 | CARATTERE( x + y ) 2 |
| CHAR(y) con un attributo di lunghezza combinata superiore a 255 | VARCHAR(MIN( x '+ y ', 32764 )) 3 | |
| VARCHAR( y ) | ||
| VAR CHAR(x) | VARCHAR( y ) | VARCHAR(MIN( x '+ y ', 32764 )) 3 |
| CLOB(x ) | CHAR(y) | CLOB(MIN( x '+ y ',2G)) |
| VARCHAR( y ) | ||
| CLOB(y ) | ||
| GRAFICO(y) | DBCLOB(MIN( x + y,1G)) | |
| VARGRAPHIC( y ) | ||
| DBCL OB (y) | ||
| GRAFICO(x) | CHAR(y) | VARGRAFICO(MIN( x + y, 16382 )) 4 |
| VARCHAR( y ) | ||
| VARGRAPHIC( y ) | ||
| VARGRAPHIC( x ) | CHAR(y) | VARGRAFICO(MIN( x + y, 16382 )) 4 |
| VARCHAR( y ) | ||
| GRAFICO(y) | ||
| GRAFICO(y) | ||
| DBCL OB (x) | CHAR(y) | DBCLOB(MIN( x + y,1G)) |
| VARCHAR( y ) | ||
| CLOB(y ) | ||
| GRAFICO(y) | ||
| VARGRAPHIC( y ) | ||
| DBCL OB (y) | ||
| BINARIO(x ) | BINARIO(y) con un attributo di lunghezza combinata inferiore a 256 | BINARIO( x + y ) |
| BINARIO(y) con un attributo di lunghezza combinata superiore a 255 | VARBINARIO( MIN (x+y,32764 )) | |
| VARBINARIO(x ) | VARB IN ARIO(y) | VARBINARIO( MIN (x+y,32764 )) |
| BINARIO(y ) | ||
| BLOB( x ) | BLOB(y) | BLOB(MIN( x + y, 2G )) |
Note:
|
||
Come mostra la tabella precedente, la lunghezza del risultato è la somma delle lunghezze degli operandi. Tuttavia, la lunghezza del risultato è di due byte in meno se i caratteri ridondanti del codice di spostamento vengono eliminati dal risultato. I caratteri di codice di spostamento ridondanti esistono quando entrambe le stringhe di caratteri sono dati misti EBCDIC e la prima stringa termina con un carattere di spostamento in
( X'0F' ) e il secondo operando inizia con un carattere di shift-out
( X'0E' ). Questi due caratteri di codice turno vengono rimossi dal risultato.
Il CCSID del risultato è determinato dalle regole stabilite in Conversione dei caratteri nelle operazioni di set e concatenazioni. Alcune conseguenze di queste regole sono le seguenti:
- Se uno dei due operandi è un dato BIT, il risultato è un dato BIT.
- La conversione che si verifica quando i dati SBCS vengono confrontati con dati misti dipende dallo schema di codifica. Se lo schema di codifica è Unicode, l'operando SBCS viene convertito in MIXED. Altrimenti, la conversione dipende dal campo MIXED DATA sul pannello di installazione DSNTIPF per l' Db2 e che effettua il confronto:
- Dati misti se l'opzione DATI MISTI sul server è SÌ. Il risultato non è necessariamente un insieme di dati ben formati.
- Dati SBCS se l'opzione DATI MISTI sul server è NO. Se i dati misti non possono essere convertiti in dati SBCS puri, si verifica un errore.
Se un operando è una stringa da una colonna con una procedura di campo, l'operazione si applica alla forma decodificata del valore. Il risultato non eredita la procedura di campo.
Un operando di concatenazione può essere un marcatore di parametro. Quando un operando è un marcatore di parametro, il suo tipo di dati e gli attributi di lunghezza sono considerati uguali a quelli dell'operando che non è un marcatore di parametro, tranne che per un tipo di dati stringa. Fare riferimento alla Tabella 1 per la formula utilizzata per calcolare la lunghezza del tipo di dati per i marcatori di parametri non tipizzati nell'operatore CONCAT quando un altro operando è un tipo di dati stringa. L'ordine delle operazioni di concatenazione deve essere considerato per determinare questi attributi nel caso di concatenazione nidificata.
CREATE FUNCTION ATTACH (TITLE, TITLE_DESCRIPTION)
RETURNS VARCHAR(50) SOURCE CONCAT (VARCHAR(), VARCHAR()) CREATE FUNCTION "||" (TITLE, TITLE_DESCRIPTION)
RETURNS VARCHAR(50) SOURCE CONCAT (VARCHAR(), VARCHAR())