Constantes

Una constante (a veces llamada un literal) especifica un valor. Las constantes se clasifican como constantes nulas, constantes de serie, constantes numéricas, constantes de fecha y hora o constantes booleanas. Las constantes numéricas pueden clasificarse en categorías menores, como entero, coma flotante, decimal o coma flotante decimal. Las constantes de serie se distribuyen en las categorías de carácter, gráfica o binaria.

Todas las constantes, excepto las constantes nulas, tienen el atributo NOT NULL.

Un valor de cero negativo en una constante numérica (-0) indica el mismo valor que un cero sin el signo (0).

Los tipos definidos por el usuario tienen tipificación firme, excepto para los tipos diferenciados de tipado débil. Esto significa que un tipo de definido por el usuario de tipado fuerte sólo es compatible con su propio tipo. Las constantes, que no sean constantes nulas, tienen un tipo de datos incorporado. Por lo tanto, una operación que implique un tipo definido por el usuario de tipado fuerte y una constante sólo es posible si el tipo definido por el usuario se ha convertido en el tipo incorporado de la constante o si la constante se ha convertido en el tipo definido por el usuario. Por ejemplo, utilizando la tabla y el tipo diferenciado en Comparaciones de tipos definidos por el usuario, son válidas las comparaciones siguientes con la constante 14:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > CAST(14 AS YOUTH)
   SELECT * FROM CAMP_DB_ROSTER
     WHERE CAST(AGE AS INTEGER) > 14
No será válida la siguiente comparación:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > 14

Constantes nulas (NULL)

La constante nula indica el valor nulo. La constante nula no tiene ningún tipo de datos. El tipo de datos de la palabra clave NULL lo proporciona el contexto en el que se utiliza, o puede utilizar CAST para asignar un tipo de datos.

Constantes enteras

Una constante entera especifica un entero en forma de número, con signo o sin signo, con un máximo de 19 dígitos que no incluye ninguna coma decimal. El tipo de datos de una constante entera es entero grande si su valor está comprendido en el rango de un entero grande. El tipo de datos de una constante entera es un entero superior si su valor se encuentra fuera del rango de un entero grande, pero está comprendido en el rango de un entero superior. Una constante definida fuera del rango de valores enteros superior se considera una constante decimal.

Tenga en cuenta que la representación literal más pequeña de una contante de entero largo es -2.147.483.647 y no -2.147.483.648, que es el límite para valores enteros. De manera similar, la representación literal más pequeña de una constante entera grande es -9.223.372.036.854.775.807 y no -9.223.372.036.854.775.808, que es el límite para valores de entero grande.

Ejemplos:
   64     -15     +100     32767     720176      12345678901

En los diagramas de sintaxis, el término entero se utiliza para una constante entera grande que no debe incluir un signo.

Constantes de coma flotante

Una constante de coma flotante especifica un número en coma flotante como dos números separados por una E. El primer número puede incluir un signo y un separador decimal; el segundo número puede incluir un signo, pero no un separador decimal. El tipo de datos de una constante de coma flotante es de precisión doble. El valor de la constante es el producto del primer número y la potencia de 10 especificada por el segundo número; este valor debe estar dentro del rango de los números de coma flotante. El número de bytes de la constante no debe exceder de 30.

Ejemplos:
   15E1     2.E5     2.2E-1     +5.E+2

Constantes decimales

Una constante decimal es un número con o sin signo de 31 dígitos de longitud como máximo y que incluye una coma decimal o no está comprendido dentro del rango de enteros binarios. Debe estar comprendido en el rango de números decimales. La precisión es el número total de dígitos (incluyendo los ceros iniciales y de cola); la escala es el número de dígitos situados a la derecha de la coma decimal (incluyendo los ceros de cola).

Ejemplos:
   25.5     1000.     -15.     +37589.3333333333

Constantes de coma flotante decimal

No hay ninguna constante de coma flotante decimal excepto los valores especiales de coma flotante decimal, que se interpreta como DECFLOAT(34).

Estos valores especiales son: INFINITY, NAN y SNAN. INFINITY representa infinito, un número cuya magnitud es infinitamente grande. INFINITY puede ir precedido por un signo opcional. Puede especificarse INF en lugar de INFINITY. NAN significa No es un número (NaN) y a veces se denomina Quiet NaN. Es un valor que representa resultados no definidos que no produce ningún aviso ni ninguna excepción. SNAN representa Signalling NaN (sNaN). Es un valor que representa resultados no definidos que producirá un aviso o una excepción si se utiliza en cualquier operación que esté definida en cualquier operación numérica. Tanto NAN como SNAN pueden ir precedidos por un signo opcional, pero el signo no es significativo para las operaciones aritméticas.. SNAN puede utilizarse en operaciones no numéricas sin que se genere un aviso o una excepción, por ejemplo en la lista VALUES de INSERT o como constante comparada en un predicado.
   SNAN   -INFINITY
Cuando se utiliza uno de los valores especiales (INFINITY, INF, NAN o SNAN) en un contexto en el que éste podría interpretarse como un identificador, como un nombre de columna, convierta la representación del valor especial de la serie en un valor de coma flotante decimal. Ejemplos:
   CAST ('snan' AS DECFLOAT)
   CAST ('INF' AS DECFLOAT)
   CAST ('Nan' AS DECFLOAT) 

Todos los valores no especiales se interpretan como constantes decimales, de coma flotante o entero, con arreglo a las normas especificadas anteriormente. Para obtener un valor de coma flotante decimal numérico, utilice la función de conversión DECFLOAT con una constante de serie de caracteres. No es recomendable utilizar constantes de coma flotante como argumentos para la función DECFLOAT, ya que la coma flotante no es exacta y el valor de coma flotante decimal puede resultar diferente de los caracteres de dígito decimales que componen el argumento. En su lugar, utilice constantes de caracteres como argumentos para la función DECFLOAT.

Por ejemplo, DECFLOAT('6.0221415E23', 34) devuelve el valor de coma flotante decimal 6.0221415E+23, pero DECFLOAT(6.0221415E23, 34) devuelve el valor de coma flotante decimal 6.0221415000000003E+23.

Constantes de series de caracteres

Una constante de serie de caracteres especifica una serie de caracteres de longitud variable de tipo VARCHAR. Las unidades de secuencia de valores constantes se determinan mediante las unidades de secuencia por omisión del entorno. Existen tres formatos de constante de serie de caracteres:
  • Secuencia de caracteres empieza y termina con el delimitador de serie apóstrofo ('). El número de bytes comprendido entre los delimitadores de serie no puede ser mayor que 32672. Cuando la unidad de serie de entorno es CODEUNITS32, el número de unidades de código no puede ser mayor que 8168. Se utilizan dos delimitadores de serie consecutivos para representar un delimitador de serie en la serie de caracteres. Dos delimitadores de serie consecutivos que no están contenidos en una serie representan la serie vacía.
  • X seguida de una secuencia de caracteres que empieza y termina con un delimitador de serie. Este formato de constante de serie de caracteres también se denomina constante hexadecimal. Los caracteres entre los delimitadores de serie deben ser un número par de dígitos hexadecimales. Los espacios en blanco entre los delimitadores de serie se ignoran. El número de dígitos hexadecimales no debe exceder los 32.672. Cuando la unidad de serie de entorno es CODEUNITS32, el número de unidades de código que representa la constante hexadecimal no puede ser mayor que 8168. Un dígito hexadecimal es un dígito 0 al 9 o cualquiera de las letras A a F (mayúsculas o minúsculas). Según los convenios de notación hexadecimales, cada par de dígitos hexadecimales representa un carácter. Este formato de constante de serie de caracteres le permite especificar caracteres que no tienen representación de teclado.
  • U& seguida de una secuencia de caracteres que empieza y termina con un delimitador de serie y que está seguida opcionalmente de la cláusula UESCAPE. Este formato de constante de serie de caracteres también se denomina constante de serie Unicode. El número de bytes entre los delimitadores de serie no puede ser superior a 32.672. Cuando la unidad de serie de entorno es CODEUNITS32, el número de unidades de código que representa la constante de serie Unicode no puede ser mayor que 8168. La constante de serie Unicode se convierte de UTF-8 a la página de códigos de sección durante la compilación de sentencia. Se utilizan dos delimitadores de serie consecutivos para representar un delimitador de serie dentro de la serie de caracteres. Se utilizan dos caracteres de escape de Unicode consecutivos para representar un carácter de escape de Unicode en la serie de caracteres, pero estos caracteres cuentan como un carácter cuando se calculan las longitudes de las constantes de tipo carácter. Dos delimitadores de serie consecutivos que no están contenidos en una serie representan la serie vacía. Dado que un carácter en UTF-8 puede estar en el rango de 1 a 4 bytes, una constante de serie de Unicode de la longitud máxima puede representar en realidad menos de 32.672 caracteres.

    Un carácter se puede expresar mediante su carácter tipográfico (glifo) o su elemento de código Unicode. El elemento de código de un carácter Unicode está en el rango de X'000000' a X'10FFFF'. Para expresar un carácter Unicode mediante el elemento de código, utilice el carácter de escape de Unicode seguido de 4 dígitos hexadecimales o el carácter de escape de Unicode seguido de un signo más (+) y 6 dígitos hexadecimales. El carácter de escape de Unicode por omisión es la barra inclinada invertida (\), pero se puede especificar un carácter diferente con la cláusula UESCAPE. La cláusula UESCAPE se especifica como la palabra clave UESCAPE seguida de un carácter individual entre delimitadores de serie. El carácter de escape de Unicode no puede ser un signo más (+), unas comillas dobles ("), unas comillas simples ('), un espacio en blanco ni ninguno de los caracteres de 0 a 9 o de A a F, en mayúsculas o minúsculas (SQLSTATE 42604). Un ejemplo de los dos modos en que se puede especificar la letra latina A mayúscula como elemento de código de Unicode es \0041 y \+000041.

El valor de una constante se convierte siempre en la página de códigos de la base de datos cuando se vincula con la base de datos. Se considera que está en la página de códigos de la base de datos. Por lo tanto, si se utiliza en una expresión que combina una constante con una columna FOR BIT DATA y cuyo resultado es FOR BIT DATA, el valor de la constante no se convertirá desde su representación de página de códigos de base de datos.

Ejemplos:
'12/14/1985'    '32'    'DON''T CHANGE'    ''
X'FFFF'    X'46 72 61 6E 6B'
U&'\0141ód\017A is a city in Poland'   U&'c:\\temp'   U&'@+01D11E' UESCAPE '@'
La serie situada más a la derecha en la segunda línea del ejemplo representa el patrón VARCHAR de la serie ASCII Frank. La última línea corresponde a: Lodz es una ciudad en Polonia, c:\temp, y un único carácter que representa el símbolo musical G clef.

Constantes de series gráficas

Una constante de serie gráfica especifica una serie gráfica de longitud variable de tipo VARGRAPHIC.
Constantes de serie gráfica UTF-16 BE

Una serie gráfica UTF-16 BE hexadecimal que especifica que también es compatible una constante de serie gráfica UTF-16 BE de longitud variable. El formato de una constante de serie gráfica UTF-16 BE hexadecimal es: UX seguido de una secuencia de caracteres que empieza y acaba con un apóstrofo. Los caracteres que se encuentran entre los apostrofes deben ser un múltiplo par de cuatro dígitos hexadecimales. El número de dígitos hexadecimales no debe superar los 16336; en caso contrario, se devuelve un error (SQLSTATE 54002). Si una constante de serie gráfica UTF-16 BE hexadecimal se ha formado de forma incorrecta, se devuelve un error (SQLSTATE 42606). Cada grupo de cuatro dígitos representa un único carácter gráfico UTF-16 BE.

Ejemplo:
   UX'0042006F006200620079'
representa el patrón VARGRAPHIC de la serie ASCII Bobby.
Bases de datos que no son de Unicode
En una base de datos que no sea Unicode, una constante de serie gráfica consta de una secuencia de caracteres de doble byte que empieza y termina con un apóstrofo de un único byte ('), precedido de un G o N de byte único. Los caracteres comprendidos entre los apóstrofos han de representar un número par de bytes y la longitud de la serie gráfica no puede superar los 16336 bytes dobles. El apóstrofo no debe aparecer como parte de un carácter MBCS para que se considere como delimitador. Por ejemplo:
   G'double-byte character string'
   N'double-byte character string'
bases de datos Unicode
En una base de datos de Unicode, una constante de secuencia gráfica consiste de una secuencia de caracteres que comienza y termina con un apóstrofo ('), y que va precedido por un carácter G o N. Las unidades de secuencia de valores constantes se determinan mediante las unidades de la secuencia por omisión del entorno. Los caracteres entre apóstrofos se convierten al código de la página 1200 y la longitud de la serie gráfica no debe exceder los 16336 bytes dobles. Cuando la unidad de la serie de entorno es CODEUNITS32, el número de unidades de código no debe exceder los 8168.

En una base de datos Unicode, también se da soporte a una constante de serie gráfica hexadecimal que especifica una serie gráfica de longitud variable. El formato de una constante de serie gráfica hexadecimal es: GX seguido por una secuencia de caracteres que empieza y termina por un apostrofe. Los caracteres que se encuentran entre los apostrofes deben ser un múltiplo par de cuatro dígitos hexadecimales. El número de dígitos hexadecimales no debe exceder los 32.672. Cuando la unidad de la secuencia del entorno es CODEUNITS32, el número de unidades de código que la constante de la secuencia gráfica hexadecimal representa no debe exceder de 8 168; de lo contrario se devuelve un error (SQLSTATE 54002). Si el formato de la constante de serie gráfica hexadecimal no es correcto, se devuelve un error (SQLSTATE 42606). Cada grupo de cuatro dígitos representa un único carácter gráfico. En una base de datos Unicode, sería un único carácter gráfico UCS-2 .

Ejemplos:
   GX'FFFF'
representa el patrón de bits '1111111111111111' en una base de datos Unicode.
   GX'005200690063006B'
representa el patrón VARGRAPHIC de la serie ASCII Rick en una base de datos Unicode.

Restricciones de serie binaria

Una constante de serie binaria especifica una serie binaria de longitud variable de tipo VARBINARY.

Una constante de serie binaria se forma especificando BX seguido de una secuencia de caracteres que empieza y finaliza con un delimitador de serie. Los caracteres entre los delimitadores de serie deben ser un número par de dígitos hexadecimales. El número de dígitos hexadecimales no debe exceder los 32.672.

Un dígito hexadecimal es un dígito 0 al 9 o cualquiera de las letras A a F (mayúsculas o minúsculas). Bajo los convenios de notación hexadecimal, cada par de dígitos hexadecimales representa un byte. Esta representación es similar a la representación de la constante de tipo carácter que utiliza la forma X''. Sin embargo, la constante de serie binaria y la constante de serie de caracteres no son compatibles y la forma X'' no se puede utilizar para especificar una constante de serie binaria, igual que la forma BX'' no se puede utilizar para especificar una constante de serie de caracteres.

Ejemplos de constantes de serie binaria:
BX'0000'
BX'C141C242'
BX'FF00FF01FF'

Constantes de fecha y hora

Una constante de fecha y hora especifica una fecha, una hora o una indicación de fecha y hora.

Por lo general, las constantes de serie de caracteres se utilizan para representar valores de fecha y hora constantes en asignaciones y comparaciones. Sin embargo, se puede utilizar el nombre de tipo de datos asociado antes de los formatos específicos de la constante de serie de caracteres para denotar específicamente la constante como constante de fecha y hora en vez de una constante de serie de caracteres. El formato de estas tres constantes de fecha y hora es el siguiente:
DATE 'yyyy-mm-dd'
El tipo de datos del valor es DATE.
TIME 'hh:mm:ss'
o
TIME 'hh:mm'
El tipo de datos del valor es TIME.
TIMESTAMP 'yyyy-mm-dd hh:mm:ss.nnnnnnnnnnnn'
o
TIMESTAMP 'yyyy-mm-dd-hh.mm.ss.nnnnnnnnnnnn'
donde el número de dígitos de segundos fraccionarios puede variar entre 0 y 12 y el carácter de punto se puede omitir si no hay segundos fraccionarios. El tipo de datos del valor es TIMESTAMP(p), donde p es el número de dígitos de los segundos fraccionarios.
Pueden omitirse los ceros iniciales de los elementos correspondientes al mes, día y hora de la parte de la constante de serie de caracteres, cuando sea aplicable, en todas las constantes de fecha y hora. Deben incluirse ceros iniciales para los elementos de minutos y segundos de las constantes TIME o TIMESTAMP. Se pueden incluir y omitir los espacios en blanco finales.

Constantes de series gráficas UCS-2

En una base de datos Unicode, se da soporte a una serie gráfica hexadecimal UCS-2 que especifica una constante de serie gráfica UCS-2 de longitud variable. El formato de una constante de serie gráfica UCS-2 hexadecimal es: UX seguido por una secuencia de caracteres que empieza y termina por un apostrofe. Los caracteres que se encuentran entre los apostrofes deben ser un múltiplo par de cuatro dígitos hexadecimales. El número de dígitos hexadecimales no debe superar los 16336; en caso contrario, se devuelve un error (SQLSTATE 54002). Si el formato de la constante de serie gráfica UCS-2 hexadecimal no es correcto, se devuelve un error (SQLSTATE 42606). Cada grupo de cuatro dígitos representa un único carácter gráfico UCS-2.

Ejemplo:
   UX'0042006F006200620079'
representa el patrón VARGRAPHIC de la serie ASCII Bobby.

Constantes booleanas

Una constante booleana especifica la palabra clave TRUE o FALSE, que representa el valor de verdad correspondiente. Se puede especificar un valor de verdad desconocido utilizando CAST(NULL AS BOOLEAN).