Nas seções a seguir, referências a valores de data e hora com representações de "cadeia de caracteres" foram alteradas para representações de "cadeia". O DB2 agora suporta, apenas para bancos de dados Unicode, representações de "cadeia gráfica" de valores de data e hora.
Valores cujos tipos de dados são DATE, TIME ou TIMESTAMP são representados em um formato interno que é transparente para o usuário. Os valores de data, hora e data e hora podem, no entanto, também ser representados por cadeias. Isso é útil, porque não há constantes ou variáveis cujos tipos de dados são DATE, TIME ou TIMESTAMP. Antes de poder ser recuperado, um valor de data e hora deve ser atribuído a uma variável de cadeia. A função CHAR ou a função GRAPHIC (apenas para bancos de dados Unicode) podem ser utilizadas para alterar um determinado valor de uma representação de cadeia. A representação da cedia é geralmente o formato padrão dos valores de data e hora associados ao código do país/região do banco de dados, a não ser que substituído por especificação da opção DATETIME quando o programa é pré-compilado ou ligado ao banco de dados.
Não importando seu comprimento, uma cadeia de objeto grande, um valor LONG VARCHAR ou um valor LONG VARGRAPHIC, não pode ser utilizada para representar um valor de data e hora (SQLSTATE 42884).
Quando uma representação de cadeia válida de um valor de data e hora for utilizado em uma operação com um valor de data e hora interno, a representação da cadeia é convertida para o formato interno do valor da data, da hora ou da data e hora antes da operação ser executada.
Cadeias de data, de hora e de data e hora devem conter apenas caracteres e dígitos.
As definições desses termos foram levemente alteradas. As referências às representações de "cadeia de caracteres" foram alteradas para representações de "cadeia".
DATE, TIME e TIMESTAMP agora podem ser convertidos para GRAPHIC e VARGRAPHIC. GRAPHIC e VARGRAPHIC agora podem ser convertidos para DATE, TIME e TIMESTAMP. O suporte à cadeia gráfica está disponível apenas para bancos de dados Unicode.
Agora há compatibilidade de tipo de dados para atribuições e comparações entre cadeias gráficas e valores DATE, TIME e TIMESTAMP. O suporte à cadeia gráfica está disponível apenas para bancos de dados Unicode.
A regra básica para atribuições de data e hora é que um valor DATE, TIME ou TIMESTAMP pode ser atribuído apenas a uma coluna com tipo de dados correspondente (DATE, TIME ou TIMESTAMP) ou a uma variável de cadeia ou coluna de cadeia com comprimento variável. A atribuição não deve ser a uma variável ou coluna LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB ou BLOB.
Quando um valor de data e hora é atribuído a uma variável de cadeia ou a uma coluna de cadeia, a conversão para uma representação de cadeia é automática. Zeros à esquerda não são omitidos de qualquer parte da data, hora ou data e hora. O comprimento requerido do destino variará, dependendo do formato da representação da cadeia. Se o comprimento do destino for maior que o requerido e o destino for uma cadeia de comprimento fixo, ele será preenchido à direita com espaços em branco. Se o comprimento do destino for menor que o requerido, o resultado dependerá do tipo de valor de data e hora envolvido e do tipo de destino.
Quando o destino é uma variável do host, a seguinte regra se aplica:
Se os formatos ISO ou JIS forem utilizados e se o comprimento da variável do host tiver menos de 8 caracteres, a parte de segundos da hora será omitida do resultado e atribuída à variável do indicador, se fornecida. O campo SQLWARN1 de SQLCA é definido para indicar a omissão.
>>-DATE--(--expressão--)---------------------------------------><
O esquema é SYSIBM.
A função DATE retorna uma data de um valor.
O argumento deve ser uma data, uma data e hora, um número positivo menor ou igual a 3.652.059, uma representação de cadeia válida de uma data ou data e hora, ou uma cadeia de comprimento 7 que não seja LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB ou BLOB.
Apenas bancos de dados Unicode suportam um argumento que seja uma representação de cadeia gráfica de uma data ou uma data e hora.
Se o argumento for uma cadeia de comprimento 7, ele deve representar uma data válida no formato aaaannn, em que aaaa são dígitos que denotam um ano e nnn são dígitos entre 001 e 366, denotando um dia do ano.
O resultado da função é uma data. Se o argumento puder ser nulo, o resultado poderá ser nulo; se o argumento for nulo, o resultado será o valor nulo.
As outras regras dependem do tipo de dados do argumento:
Exemplos:
Suponha que a coluna RECEIVED (data e hora) tenha um valor de intervalo equivalente a '1988-12-25-17.12.30.000000'.
DATE(RECEIVED)
DATE('1988-12-25')
DATE('25.12.1988')
DATE(35)
>>-GRAPHIC--(--expressão gráfica--+-------------------+--)----->< '-,--número inteiro-'
O esquema é SYSIBM.
A função GRAPHIC retorna uma representação GRAPHIC de um tipo de cadeia gráfica ou uma representação GRAPHIC de um tipo de data e hora.
O resultado da função e um GRAPHIC. Se o argumento puder ser nulo, o resultado poderá ser nulo; se o argumento for nulo, o resultado será o valor nulo.
Data e Hora para Gráfico:
>>-GRAPHIC--(--expressão de data e hora--+--------------+--)--->< '-,--+-ISO---+-' +-USA---+ +-EUR---+ +-JIS---+ '-LOCAL-'
A página de códigos é a página de códigos do banco de dados do servidor de aplicativos.
>>-TIME--(--expressão--)---------------------------------------><
O esquema é SYSIBM.
A função TIME retorna uma hora de um valor.
O argumento deve ser uma hora, uma data e hora ou uma representação de cadeia válida de uma hora ou data e hora que não seja LONG VARCHAR, CLOB, LONG VARGRAPHIC, DBCLOB ou BLOB.
Apenas bancos de dados Unicode suportam um argumento que seja uma representação de cadeia gráfica de uma hora ou de uma data e hora.
O resultado da função é uma hora. Se o argumento puder ser nulo, o resultado poderá ser nulo; se o argumento for nulo, o resultado será o valor nulo.
As outras regras dependem do tipo de dados do argumento:
Exemplo:
SELECT * FROM IN_TRAY WHERE TIME(RECEIVED) >= CURRENT TIME + 1 HOUR
>>-TIMESTAMP--(--expressão--+------------+--)------------------>< '-,expressão-'
O esquema é SYSIBM.
A função TIMESTAMP retorna uma data e hora de um valor ou de um par de valores.
Apenas bancos de dados Unicode suportam um argumento que seja uma representação de cadeia gráfica de uma data, de uma hora ou de uma data e hora.
As regras dos argumentos depende de se o segundo argumento é especificado.
Uma cadeia de comprimento 14 deve ser uma cadeia de dígitos que representa uma data e uma hora válidas no formato aaaaxxddhhmmss, em que aaaa é o ano, xx é o mês, dd é o dia, hh é a hora, mm é o minuto e ss é o segundo.
O resultado da função é uma data e hora. Se qualquer um dos dois argumentos puder ser nulo, o resultado poderá ser nulo; se qualquer um dos dois argumentos for nulo, o resultado será o valor nulo.
As outras regras dependem de se o segundo argumento é especificado:
Exemplo:
TIMESTAMP(START_DATE, START_TIME)
Retorna o valor '1988-12-25-17.12.30.000000'.
Caractere para Vargraphic:
>>-VARGRAPHIC--(--expressão de cadeia de caracteres--)---------><
Data e Hora para Vargraphic:
>>-VARGRAPHIC--(--expressão de data e hora--)------------------><
Gráfico para Vargraphic:
>>-VARGRAPHIC--(--expressão de cadeia gráfica-------------------> >--+-------------------+--)------------------------------------>< '-,--número inteiro-'
O esquema é SYSIBM.
A função VARGRAPHIC retorna uma representação de cadeia gráfica de um:
O resultado da função é uma cadeia gráfica de comprimento variável (tipo de dados VARGRAPHIC). Se o primeiro argumento puder ser nulo, o resultado poderá ser nulo; se o primeiro argumento for nulo, o resultado será o valor nulo.
Caractere para Vargraphic
O atributo de comprimento do resultado é igual ao atributo do comprimento do argumento.
Deixe S denotar o valor da expressão de cadeia de caracteres. Cada caractere de byte simples de S é convertido à sua representação de byte duplo equivalente ou ao caractere de substituição de byte duplo no resultado; cada caractere de byte duplo de S é mapeado 'como se encontra'. Se o byte simples de um caractere de byte duplo aparecer como o último byte de S, ele é convertido para o caractere de substituição de byte duplo. A ordem seqüencial dos caracteres em S é preservada.
Seguem considerações adicionais para a conversão.
Data e Hora para Vargraphic
Gráfico para Vargraphic
Se o comprimento da expressão de cadeia gráfica for maior que o atributo de comprimento do resultado, ocorrerá uma truncagem e um aviso será retornado (SQLSTATE 01004), a não ser que os caracteres truncados estivessem todos em branco e a expressão de cadeia gráfica não fosse uma cadeia longa (LONG VARGRAPHIC ou DBCLOB).