CAST é uma função complexa que transforma um ou mais valores de um tipo de dados para outro.
CAST transforma um ou mais valores de um tipo de dados para outro. Por exemplo, você pode utilizar CAST para processar mensagens XML genéricas. Todos os campos em uma mensagem XML possuem valores de caracteres, portanto, por exemplo, se você desejasse desempenhar um cálculo aritmético ou uma comparação de data/hora em um campo, poderia utilizar CAST para converter o valor da cadeia do campo em um valor do tipo apropriado.
Nem todas as conversões são suportadas; consulte Coerções Suportadas para obter uma lista de conversões suportadas.
CAST retorna seu primeiro parâmetro (source_expression), que pode conter mais de um valor, como o tipo de dados especificado por seu segundo parâmetro (DataType). Em todos os casos, se a expressão de origem for NULL, o resultado será NULL. Se a expressão de origem avaliada não for compatível com o tipo de dados de destino, ou se a expressão de origem tiver o formato incorreto, será gerado um erro de tempo de execução.
A cláusula CCSID é utilizada apenas para conversões para/de um dos tipos de dados de cadeia. Ela permite especificar a página de códigos da cadeia de origem ou de destino.
A expressão CCSID pode ser qualquer expressão que seja avaliada como um valor de tipo INT. É interpretada de acordo com a regras normais do WebSphere Message Broker para CCSIDs.Consulte Páginas de Códigos Suportadas para obter uma lista de valores válidos.
A cláusula DEFAULT fornece um método para evitar que exceções sejam emitidas de instruções CAST, fornecendo um valor de último recurso para o retorno.
A DEFAULT expression deve ser uma expressão ESQL válida que retorne o mesmo tipo de dados que aquele especificado no parâmetro DataType, caso contrário, uma exceção é emitida.
Os parâmetros CCSID, ENCODING e FORMAT não são aplicados ao resultado da expressão DEFAULT; portanto, a expressão deve ser do CCSID, ENCODING e FORMAT corretos.
Para conversões entre tipos de dados de cadeia e tipos de dados numéricos ou de data/hora, você pode fornecer uma expressão FORMAT opcional. Para conversões de tipos de cadeia, FORMAT define como a cadeia de origem deve ser analisada para preencher o tipo de dados de destino. Para conversões para tipos de cadeia, define como os dados na expressão de origem devem ser formatados na cadeia de destino.
FORMAT suporta diferentes tipos de expressão para conversões de data/hora e numéricas. Entretanto, a mesma expressão FORMAT pode ser utilizada independentemente se a conversão é para uma cadeia ou de uma cadeia.
Para obter informações adicionais sobre a conversão para/de tipos de dados numéricos, consulte Formatando e Analisando Números como Cadeias. Para obter informações adicionais sobre a conversão para/de tipos de dados de data/hora, consulte Formatando e Analisando dateTimes como Cadeias.
A expressão FORMAT é equivalente àquelas utilizadas em vários outros produtos, como 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); -- agora o destino é "31.415,93"
DECLARE now CHARACTER = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT "yyyyMMdd-HHmmss"); -- agora o destino é "20041007-111656" (nesta instância, pelo menos)
DECLARE source CHARACTER '01-02-03'; DECLARE target DATE; DECLARE pattern CHARACTER 'dd-MM-yy'; SET target = CAST(source AS DATE FORMAT pattern); -- agora o destino contém Ano=2003, Mês=02, Dia=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); -- agora o destino contém Ano=2003, Mês=01, Dia=03, Hora=15, Minuto=45, Segundos=58 -- (segundos extraídos de CURRENT_TIME porque não estão presentes na entrada)
DECLARE source DECIMAL -54231.122; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00;(#,##0.00)'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- agora o destino é "£(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); -- agora o destino contém Hora=16, Minuto=18, Segundos=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;