CAST è una funzione complessa che converte uno o più valori da un tipo di dati ad un altro.
CAST converte uno o più valori da un tipo di dati ad un altro tipo di dati. Ad esempio, è possibile utilizzare CASE per elaborare messaggi XML generici. Tutti i campi in un messaggio XML hanno valori character, per cui se, ad esempio, si desidera eseguire un calcolo aritmetico oppure un confronto data/ora su un campo, è possibile utilizzare CAST per convertire il valore stringa del campo in un valore del tipo appropriato.
Non sono supportate tutte le conversioni; per un elenco delle conversioni supportate, consultare Funzioni CAST supportate.
CAST restituisce il proprio primo parametro (source_expression), che può contenere più di un valore, come tipo di dati specificato dal proprio secondo parametro (DataType). In tutti i casi, se l'espressione di origine è NULL, il risultato è NULL. Se l'espressione di origine valutata non è compatibile con il tipo di dati della destinazione oppure se l'espressione di origine è nel formato errato, viene generato un errore di runtime.
La clausola CCSID viene utilizzata solo per le conversioni in o da uno dei tipi di dati stringa. Consente di specificare la code page dell'origine o la stringa di destinazione.
L'espressione CCSID può essere qualsiasi espressione che ha come risultato un valore di tipo INT. Viene interpretata in base alle normali regole WebSphere Message Broker per CCSID. Per un elenco dei valori validi, consultare Code page supportate.
La clausola DEFAULT fornisce un metodo che impedisce la generazione di eccezioni dalle istruzioni CAST, fornendo un valore da restituire come ultima risorsa.
L'espressione DEFAULT expression deve essere un'espressione ESQL valida che restituisce lo stesso tipo di dati specificato nel parametro DataType; in caso contrario, viene generata un'eccezione.
I parametri CCSID, ENCODING e FORMAT non vengono applicati al risultato dell'espressione DEFAULT; per questo motivo, l'espressione deve essere di tipo CCSID, ENCODING e FORMAT corretto.
Per le conversioni tra tipi di dati stringa e tipi di dati numerici o di data/ora, è possibile fornire un'espressione FORMAT facoltativa. Per le conversioni da tipi stringa, FORMAT definisce il modo in cui la stringa di origine deve essere analizzata per soddisfare il tipo di dati di destinazione. Per le conversioni in tipi stringa, definisce il modo in cui i dati nell'espressione di origine devono essere formattati nella stringa di destinazione.
FORMAT utilizza diversi tipi di espressione per le conversioni data/ora e numeriche. Tuttavia, è possibile utilizzare la stessa espressione FORMAT indipendentemente dal fatto che la conversione sia in una stringa o da una stringa.
Per ulteriori informazioni relative alla conversione in e da tipi di dati numerici, consultare Formattazione ed analisi dei numeri come stringhe. Per ulteriori informazioni relative alla conversione in e da tipi di dati di data/ora, consultare Formattazione ed analisi di dateTimes come stringhe.
L'espressione FORMAT è equivalente a quelle utilizzate in molti altri prodotti, come, ad esempio, ICU e Microsoft Excel.
DECLARE source DECIMAL 31415.92653589; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- target is now "31,415.93"
DECLARE now CHARACTER = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT "yyyyMMdd-HHmmss"); -- target is now "20041007-111656" (in this instance at least)
DECLARE source CHARACTER '01-02-03'; DECLARE target DATE; DECLARE pattern CHARACTER 'dd-MM-yy'; SET target = CAST(source AS DATE FORMAT pattern); -- target now contains Year=2003, Month=02, Day=01
DECLARE source CHARACTER '12 Jan 03, 3:45pm'; DECLARE target TIMESTAMP; DECLARE pattern CHARACTER 'dd MMM yy, h:mma'; SET target = CAST(source AS TIMESTAMP FORMAT pattern); -- target now contains Year=2003, Month=01, Day=03, Hour=15, Minute=45, Seconds=58 -- (seconds taken from CURRENT_TIME since not present in input)
DECLARE source DECIMAL -54231.122; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00;(#,##0.00)'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- target is now "£(54,231.12)"
DECLARE source CHARACTER '16:18:30'; DECLARE target TIME; DECLARE pattern CHARACTER 'hh:mm:ss'; SET target = CAST(source AS TIME FORMAT pattern); -- target now contains Hour=16, Minute=18, Seconds=30
CAST(7, 6, 5 AS DATE); CAST(7.4e0, 6.5e0, 5.6e0 AS DATE); CAST(7.6, 6.51, 5.4 AS DATE);
CAST(9, 8, 7 AS TIME); CAST(9.4e0, 8.6e0, 7.1234567e0 AS TIME); CAST(9.6, 8.4, 7.7654321 AS TIME);
CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP); CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);
CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP); CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);
CAST(DATE '0002-03-04', GMTTIME '05:06:07' AS GMTTIMESTAMP); CAST(3, 4, 5, 6, 7, 8 AS GMTTIMESTAMP); CAST(3.1e0, 4.2e0, 5.3e0, 6.4e0, 7.5e0, 8.6789012e0 AS GMTTIMESTAMP); CAST(3.2, 4.3, 5.4, 6.5, 7.6, 8.7890135 AS GMTTIMESTAMP);
CAST(1234 AS INTERVAL YEAR); CAST(32, 10 AS INTERVAL YEAR TO MONTH ); CAST(33, 11 AS INTERVAL DAY TO HOUR ); CAST(34, 12 AS INTERVAL HOUR TO MINUTE); CAST(35, 13 AS INTERVAL MINUTE TO SECOND); CAST(36, 14, 10 AS INTERVAL DAY TO MINUTE); CAST(37, 15, 11 AS INTERVAL HOUR TO SECOND); CAST(38, 16, 12, 10 AS INTERVAL DAY TO SECOND);
CAST(2345.67e0 AS INTERVAL YEAR ); CAST(3456.78e1 AS INTERVAL MONTH ); CAST(4567.89e2 AS INTERVAL DAY ); CAST(5678.90e3 AS INTERVAL HOUR ); CAST(6789.01e4 AS INTERVAL MINUTE); CAST(7890.12e5 AS INTERVAL SECOND); CAST(7890.1234e0 AS INTERVAL SECOND);
CAST(2345.67 AS INTERVAL YEAR ); CAST(34567.8 AS INTERVAL MONTH ); CAST(456789 AS INTERVAL DAY ); CAST(5678900 AS INTERVAL HOUR ); CAST(67890100 AS INTERVAL MINUTE); CAST(789012000 AS INTERVAL SECOND); CAST(7890.1234 AS INTERVAL SECOND);
CAST(INTERVAL '1234' YEAR AS FLOAT); CAST(INTERVAL '2345' MONTH AS FLOAT); CAST(INTERVAL '3456' DAY AS FLOAT); CAST(INTERVAL '4567' HOUR AS FLOAT); CAST(INTERVAL '5678' MINUTE AS FLOAT); CAST(INTERVAL '6789.01' SECOND AS FLOAT);
CAST(INTERVAL '1234' YEAR AS DECIMAL); CAST(INTERVAL '2345' MONTH AS DECIMAL); CAST(INTERVAL '3456' DAY AS DECIMAL); CAST(INTERVAL '4567' HOUR AS DECIMAL); CAST(INTERVAL '5678' MINUTE AS DECIMAL); CAST(INTERVAL '6789.01' SECOND AS DECIMAL);
CAST(7, 6, 32 AS DATE DEFAULT DATE '1947-10-24');
CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP DEFAULT TIMESTAMP '1947-10-24 07:08:09');
BEGIN DECLARE EXIT HANDLER FOR SQLSTATE LIKE '%' BEGIN SET OutputRoot.XML.Data.Date.FromIntegersInvalidCast = 'Exception thrown'; END; DECLARE Dummy CHARACTER CAST(7, 6, 32 AS DATE); END;
BEGIN DECLARE EXIT HANDLER FOR SQLSTATE LIKE '%' BEGIN SET OutputRoot.XML.Data.Timestamp.FromIntegersInvalidCast = 'Exception thrown'; END; DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP); END;