CAST es una función compleja que transforma uno o más valores de un tipo de datos a otro.
En la práctica, no puede especificar todos los parámetros anteriores al mismo tiempo. Por ejemplo, los parámetros CCSID y ENCODING sólo tienen efecto en conversiones serie de caracteres a serie de caracteres, mientras que FORMAT sólo se aplica a conversiones serie de caracteres-numérico y serie de caracteres-fechayhora (en ambas direcciones).
La función CAST transforma uno o más valores de un tipo de datos a otro. Por ejemplo, puede utilizar CAST para procesar los mensajes XML genéricos. Todos los campos de un mensaje XML tienen valores de caracteres, por lo tanto para realizar, por ejemplo, un cálculo aritmético o una comparación de hora y fecha en un campo, puede utilizar CAST para convertir el valor de la serie de caracteres del campo en un valor del tipo adecuado.
No se da soporte a todas las conversiones; consulte Transformaciones CAST soportadas para obtener la lista de las conversiones soportadas.
CAST devuelve su primer parámetro (expresión_origen), que puede contener más de un valor, como el tipo-datos especificado por su segundo parámetro (TipoDatos). En todos los casos, si la expresión de origen es NULL, el resultado es NULL. Si la expresión de origen evaluada no es compatible con el tipo de datos de destino o si la expresión de origen tiene un formato incorrecto, se genera un error en tiempo de ejecución.
El parámetro CCSID sólo se utiliza en conversiones a o de uno de los tipos de datos de serie de caracteres. Utilice el parámetro CCSID para especificar la página de códigos de la serie de caracteres de origen o de destino.
El parámetro CCSID puede ser cualquier expresión que se evalúa con un valor de tipo INT. La expresión se interpreta según las normas de WebSphere Message Broker normales para los CCSID. Consulte Páginas de códigos soportadas para obtener una lista de valores válidos.
El parámetro DEFAULT proporciona un método para evitar que se generen excepciones desde sentencias CAST, proporcionando un valor de retorno de último recurso.
El parámetro DEFAULT debe ser una expresión ESQL válida que devuelve el mismo tipo de datos que el especificado en el parámetro TipoDatos, de lo contrario, se generará una excepción.
Los parámetros CCSID, ENCODING y FORMAT no se aplican al resultado del parámetro DEFAULT; por tanto, la expresión debe tener los valores adecuados de CCSID, ENCODING y FORMAT.
Utilice el parámetro FORMAT para conversiones entre tipos de datos de serie de caracteres y datos numéricos o de fecha y hora. Para conversiones de tipos de serie de caracteres, FORMAT define cómo debe analizarse la serie de caracteres de origen para satisfacer el tipo de datos de destino. Para conversiones a tipos de serie de caracteres, define cómo deben formatearse los datos de la expresión de origen en la serie de caracteres de destino.
FORMAT toma distintos tipos de expresión para conversiones de fecha y hora, y numéricas. Sin embargo, se puede utilizar la misma expresión FORMAT independientemente de si la conversión es a una serie de caracteres o de una serie de caracteres.
Para obtener más información sobre la conversión a y desde tipos de datos numéricos, consulte Formato y análisis de números como series de caracteres. Para obtener más información sobre la conversión a y desde tipos de datos de fecha y hora, consulte Formato y análisis de valores de fecha y hora como series de caracteres.
El parámetro FORMAT es equivalente a las que se utilizan en muchos otros productos como, por ejemplo, ICU y Microsoft Excel.
DECLARE source DECIMAL 31415.92653589; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- ahora el destino es '31,415.93'
DECLARE now CHARACTER; SET now = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyyMMdd-HHmmss'); -- ahora el destino es '20041007-111656' (al menos, en esta instancia)
DECLARE source CHARACTER '01-02-03'; DECLARE target DATE; DECLARE pattern CHARACTER 'dd-MM-yy'; SET target = CAST(source AS DATE FORMAT pattern); -- ahora el destino contiene 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 -- (segundos tomados de CURRENT_TIME puesto que no están presentes en la entrada)
DECLARE source DECIMAL -54231.122; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00;(#,##0.00)'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- ahora el destino es '£(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); -- ahora el destino contiene 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.XMLNS.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.XMLNS.Data.Timestamp.FromIntegersInvalidCast = 'Exception thrown'; END; DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP); END;