Función CAST

CAST es una función compleja que transforma uno o más valores de un tipo de datos a otro.

SINTAXIS

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.

Parámetros

Expresión de origen

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.

CCSID

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.

TipoDatos

El parámetro DataType es el tipo de datos al que se transforma el valor de origen. Los valores posibles son:
  • Tipos de serie de caracteres:
    • BIT
    • BLOB
    • CHARACTER
  • Tipos numéricos:
    • DECIMAL
    • FLOAT
    • INTEGER
  • Tipos de fecha y hora:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • Booleano:
    • BOOLEAN
Asegúrese de especificar un subtipo de intervalo ESQL válido después de un tipo de fecha hora de INTERVAL. Puede consultar los subtipos de intervalo ESQL válidos en Tipo de datos INTERVAL (intervalo) ESQL. Para consultar los mandatos de ejemplo que muestran cómo especificar un subtipo de intervalo ESQL válido, consulte los ejemplos 12, 13 y 14 más abajo.

DEFAULT

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.

ENCODING

Utilice el parámetro ENCODING para especificar el cifrado para ciertas conversiones. El valor ENCODING puede ser cualquier expresión que se evalúa con un valor de tipo INT y se interpreta según las normas de codificación de WebSphere Message Broker normales. Los valores válidos son:
  • MQENC_NATIVE (0x00000222L)
  • MQENC_INTEGER_NORMAL (0x00000001L)
  • MQENC_INTEGER_REVERSED (0x00000002L)
  • MQENC_DECIMAL_NORMAL (0x00000010L)
  • MQENC_DECIMAL_REVERSED (0x00000020L)
  • MQENC_FLOAT_IEEE_NORMAL (0x00000100L)
  • MQENC_FLOAT_IEEE_REVERSED (0x00000200L)
  • MQENC_FLOAT_S390 (0x00000300L)

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.

Puede especificar un parámetro FORMAT al realizar transformaciones:
  • De cualquier tipo de datos de serie de caracteres (BIT, BLOB o CHARACTER) a:
    • DECIMAL
    • FLOAT
    • INTEGER
    • DATE
    • GMTTIMESTAMP
    • TIMESTAMP
    • GMTTIME
    • TIME
  • A cualquier tipo de datos de serie de caracteres (BIT, BLOB o CHARACTER) desde cualquier tipo de datos numérico o de fecha y hora, de la lista anterior.
La especificación de FORMAT para una combinación no soportada de tipos de datos de origen y de destino generará el mensaje de error BIP3205.

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.

Ejemplos

Ejemplo 1. CAST formateado de DECIMAL a CHARACTER

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'

Ejemplo 2. CAST formateado de DATE a CHARACTER

Inicio del cambio
DECLARE now CHARACTER;
SET now = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyyMMdd-HHmmss');
-- ahora el destino es '20041007-111656' (al menos, en esta instancia)
Fin del cambio

Ejemplo 3. CAST formateado de CHARACTER a DATE

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

Ejemplo 4. CAST formateado de CHARACTER a TIMESTAMP

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)

Ejemplo 5. CAST formateado de DECIMAL a CHARACTER, con patrón negativo

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)'

Ejemplo 6. CAST formateado de CHARACTER a TIME

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

Ejemplo 7. CASTs de tipos numéricos a DATE

CAST(7, 6, 5 AS DATE);
CAST(7.4e0, 6.5e0, 5.6e0 AS DATE);
CAST(7.6, 6.51, 5.4 AS DATE);

Ejemplo 8. CASTs de tipos numéricos a TIME

CAST(9, 8, 7 AS TIME);
CAST(9.4e0, 8.6e0, 7.1234567e0 AS TIME);
CAST(9.6, 8.4, 7.7654321 AS TIME);

Ejemplo 9. CASTs de tipos numéricos a GMTTIME

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

Ejemplo 10. CASTs a TIMESTAMP

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

Ejemplo 11. CASTs a GMTTIMESTAMP

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);

Ejemplo 12. CASTs a INTERVAL desde INTEGER

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);

Ejemplo 13. CASTs a INTERVAL desde FLOAT

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);

Ejemplo 14. CASTs a INTERVAL desde DECIMAL

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);

Ejemplo 15. CASTs a FLOAT desde INTERVAL

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);

Ejemplo 16. CASTs DECIMAL desde INTERVAL

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);

Ejemplo 17. Una transformación ternaria que falla y origina la sustitución de un valor predeterminado

CAST(7, 6, 32 AS DATE DEFAULT DATE '1947-10-24');

Ejemplo 18. Una transformación de seis elementos que falla y origina la sustitución de un valor predeterminado

CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP DEFAULT TIMESTAMP '1947-10-24 07:08:09');

Ejemplo 19. Una transformación ternaria que falla y genera una excepción

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;

Ejemplo 20. Una transformación de seis elementos que falla y genera una excepción

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;
Conceptos relacionados
Visión general de ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última actualización : 2009-02-16 13:55:34

ak05610_