CAST es una función compleja que transforma uno o más valores de un tipo de datos a otro.
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 si, por ejemplo, desea realizar 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.
La cláusula CCSID sólo se utiliza para conversiones a o de uno de los tipos de datos de serie de caracteres. Le permite especificar la página de códigos de la serie de caracteres de origen o de destino.
La expresión CCSID puede ser cualquier expresión que se evalúa con un valor de tipo INT. 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 los valores válidos.
La cláusula DEFAULT proporciona un método para evitar que se generen excepciones desde sentencias CAST, proporcionando un valor de retorno de último recurso.
DEFAULT expresión 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 de CCSID, ENCODING y FORMAT no se aplican al resultado de la expresión DEFAULT; por tanto, la expresión debe ser del CCSID, ENCODING y FORMAT correcto.
Para conversiones entre tipos de datos de serie de caracteres y tipos de datos numéricos o de fecha y hora, puede proporcionar una expresión FORMAT opcional. 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.
La expresión 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 = 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); -- ahora el destino contiene 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.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;