Como Utilizar Funções Data-Hora

Nesta seção:

As funções descritas nesta seção operam em campos no formato data-hora (às vezes chamado de formato H).


Topo da página

x
Parâmetros Data-Hora

Nesta seção:

O parâmetro DATEFORMAT especifica a ordem dos componentes de data para certos tipos de valores data-hora. O parâmetro WEEKFIRST especifica o primeiro dia da semana. O parâmetro DTSTRICT determina a extensão da verificação de validade dos valores data-hora.



x
Como Especificar a Ordem de Componentes de Dados

O parâmetro DATEFORMAT especifica a ordem dos componente de data (mês/dia/ano) quando os valores data-hora são inseridos na string formatada e nos formatos de string traduzidos descritos em Como Utilizar Formatos Data-Hora . Torna um formato da entrada do valor independente do formato da variável a qual está sendo atribuído.



x
Sintaxe: Como Especificar a Ordem dos Componentes de Data em um Campo Data-Hora
SET DATEFORMAT = option							

onde:

Opção

Pode ser um dos seguintes: MDY, DMY, YMD OU MYD. MDY é o valor padrão para o formato do inglês americano.



Exemplo: Como Utilizar o Parâmetro DATEFORMAT

A solicitação a seguir utiliza um literal de data natural com dia numérico componentes ambíguos e numéricos de dia e mês (APR 04 05) como a entrada para a função HINPUT:

SET DATEFORMAT = MYD
DEFINE FILE EMPLOYEE
DTFLDYYMD/HYYMDI =  HINPUT(9,'APR 04 05', 8, DTFLDYYMD);
END
TABLE FILE EMPLOYEE
SUM   CURR_SAL NOPRINT DTFLDYYMD
END

Com DATEFORMAT definido como MYD, o valor é interpretado como 5 de abril de 1904:

DTFLDYYMD
---------
1904-04-05 00:00


x
Como Especificar o Primeiro Dia da Semana para Uso nas Funções Data-Hora

O parâmetro WEEKFIRST especifica um dia da semana como o início da semana. Isto é utilizado em cálculos de semanas pelas funções HADD, HDIF, HNAME, HPART E HYYWD. Este parâmetro também é utilizado pelas funções DTADD, DTDIFF, DTRUNC e DTPART. Os valores padrões são diferentes para estas funções, como descrito em Como Definir um Dia como o Início da Semana. O parâmetros WEEKFIRST não altera o dia do mês que corresponde a cada dia da semana; ele apenas especifica qual dia é considerado o início da semana.

As subrotinas HPART, DTPART, HYYWD e HNAME podem extrair um número de semana de um valor data-hora. Para determinar o número de uma semana, é possível utilizar diferentes definições. Por exemplo, a numeração de semana padrão ISO 8601 define a primeira semana do ano como a primeira semana de janeiro com quatro ou mais dias. Qualquer dia anterior em janeiro pertence à semana 52 ou 53 do ano anterior. O padrão ISO também estabelece segunda-feira como o primeiro dia da semana.

Você pode especificar o tipo de numeração de semana que deseja utilizar definindo o parâmetro WEEKFIRST, como descrito em Como Definir um Dia como o Início da Semana.

O número da semana exibido pelas funções HNAME e HPART e DPART pode estar no ano atual, anterior ou posterior, portanto, o número da semana por si só pode não ser útil. A função HYYWD retorna o ano e a semana de um valor data-hora específico.



x
Sintaxe: Como Definir um Dia como o Início da Semana
SET WEEKFIRST = value

onde:

value

Pode ser:

  • 1 a 7, que representa os dias da semana de domingo a sábado com numeração não padrão.

    A numeração da semana utilizando estes valores estabelece a primeira semana com sete dias de janeiro como a semana número 1. Dias anteriores em janeiro pertencem à última semana do ano anterior. Todas as semanas possuem sete dias.

  • De ISO1 a ISO7, representando de Domingo a Sábado com a numeração padrão da semana ISO.

    Observação: ISO é um sinônimo para ISO2.

    A numeração da semana utilizando estes valores estabelece a primeira semana com pelo menos quatro dias de janeiro como a semana número 1. Dias anteriores em janeiro pertencem à última semana do ano anterior. Todas as semanas possuem sete dias.

  • STD1 a STD7, no qual o dígito 1, domingo (parte do intervalo do dígito 1 ao dígito 7, sábado), indica o dia de início da semana.

    Observação: STD sem um dígito é equivalente a STD1.

    Abaixo, você pode observar como fica a numeração da semana utilizando estes valores. A semana número 1 começa no dia 1º de janeiro e termina no dia anterior ao primeiro dia da semana. Por exemplo, para STD1, a primeira semana termina no primeiro sábado do ano. As primeira e última semana possuem menos do que sete dias.

  • SIMPLE, que estabelece que 1º de janeiro é o início da semana 1, 8 de janeiro é o início da semana 2, etc. O primeiro dia da semana é, portanto, o mesmo que o primeiro dia do ano. A última semana (semana 53) possui um ou dois dias.
  • 0 (zero) é o valor da definição WEEKFIRST antes do usuário emitir uma definição WEEKFIRST explícita. As funções de data-hora HPART, HNAME, HYYWD, HADD e HDIFF utilizam o sábado como o início da semana quando WEEKFIRST for 0. As funções simplificadas DTADD, DTDIFF, DTRUNC e DTPART, assim como a impressão de datas truncadas em semanas e o reconhecimento de strings constantes de datas que contêm números de semana, utilizam domingo como valor padrão quando WEEKFIRST for 0. Se o usuário definir explicitamente WEEKFIRST com outro valor, estes valor será utilizado por todas as outras funções.


Exemplo: Como Definir Domingo como o Início da Semana

O exemplo a seguir designa o domingo como o início da semana utilizando uma numeração de semana fora do padrão:

SET WEEKFIRST = 1


x
Sintaxe: Como Visualizar a Definição Atual de WEEKFIRST
? SET WEEKFIRST

Isto exibe o valor que indica o algoritmo de numeração de semana e o primeiro dia da semana. Por exemplo, o inteiro 1 representa o domingo com numeração de semana fora do padrão.



x
Como Controlar o Processamento de Valores Data-Hora

Um processamento detalhado verifica os valores data-hora quando são inseridos por um usuário final, lidos de um arquivo de transação, exibidos ou resultantes de uma subrotina para garantir que os mesmos representem uma data e hora válidas. Por exemplo, um mês numérico deve ser um número entre 1 e 12 e o dia deve ser um valor dentro do número de dias do mês especificado.



x
Sintaxe: Como Habilitar o Processamento Estrito de Valores Data-Hora
SET DTSTRICT = {ON|OFF}

onde:

ON

Chama o processamento estrito. ON é o valor padrão.

Um processamento detalhado verifica os valores data-hora quando são inseridos por um usuário final, lidos de um arquivo de transação, exibidos ou resultantes de uma subrotina para garantir que os mesmos representem uma data e hora válidas. Por exemplo, um mês numérico deve ser um número entre 1 e 12 e o dia deve ser um valor dentro do número de dias do mês especificado.

Se DTSTRICT estiver ATIVADO e o resultado for um valor data-hora inválido, a função exibe o valor zero (0).

DESLIGADO

Não chama o processamento estrito. Os componentes data-hora podem possuir qualquer valor dentro das limitações de quantidade de dígitos decimais permitida no campo. Por exemplo, se o campo for um mês de dois dígitos, o valor pode ser 12 ou 99, mas não 115.


Topo da página

x
Como Fornecer Argumentos para Funções Data-Hora

Referência:

Funções data-hora podem operar em um componente de um valor data-hora. Este tópico lista os nomes e abreviações de componentes válidos e para uso com estas funções.



x
Referência: Argumentos para Uso com Funções de Data e Hora

Os nomes de componentes, abreviações válidas e valores a seguir possuem suporte como argumentos para funções data-hora que necessitam deles:

Nome do Componente

Abreviação

Valores Válidos

year
yy

0001-9999

quarter
qq

1-4

month
mm

1-12 ou um nome de mês, dependendo da função.

day-of-year
dy

1-366

												day or day-of-month 											
dd

1-31 (Os dois nomes de componentes são equivalentes.)

week
wk

1-53

weekday
dw

1-7 (domingo-sábado)

hour
hh

0-23

minute
mi

0-59

second
ss

0-59

millisecond
ms

0-999

microsecond
mc

0-999999

nanosecond
ns

0-999999999

Comunicado:

  • Para um argumento que especifica um comprimento de oito, dez ou doze caracteres, utilize oito para incluir milissegundos, dez para incluir microssegundos e doze para incluir nanossegundos no valor.
  • O último argumento é sempre um formato USAGE que indica o tipo de dados exibidos pela função. O tipo pode ser A (alfanumérico), I (inteiro), D (dupla precisão com ponto flutuante), H (data-hora) ou um formato de data (por exemplo, YYMD).



x
Como Utilizar Formatos Data-Hora

Nesta seção:

Há três tipos de formatos de data que são válido em valores data-hora: formato de string numérica, formato de string formatada e formato de string traduzida. Em cada formato, anos com dois dígitos são interpretados utilizando os parâmetros DEFCENT e YRTHRESH.

Os componentes de tempo são separados por dois pontos e podem ser seguidos de A.M., P.M., a.m. ou p.m.

O parâmetro DATEFORMAT especifica a ordem dos componente de data (mês/dia/ano) quando os valores data-hora são inseridos na string formatada e nos formatos de string traduzidos. Torna um formato da entrada do valor independente do formato da variável a qual está sendo atribuído.



x
Formato de String Numérica

O formato da string numérica é de exatamente dois, quatro, seis ou oito dígitos. Strings com quatro dígitos são consideradas um ano (século deve ser especificado) e o mês e o dia são definidos como janeiro 1. Strings de seis e oito dígitos contêm dois ou quatro dígitos para o ano, seguidos por dois para o mês e dois para o dia. A ordem dos componentes é fixa neste formato, portanto, a definição DATEFORMAT é ignorada.

Se um formato de string numérica com mais de oito dígitos for encontrado, ele será tratado como uma string data-hora combinada no formato Hnn.



Exemplo: Como Utilizar Formato de String Numérica

A seguir, você encontra exemplos de constantes de data de strings numéricas:

Sequência

Data

99

Janeiro 1, 1999

1999

Janeiro 1, 1999

19990201

Fevereiro 1, 1999



x
Formato de String Formatada

O formato de strings formatadas contém um dia de um ou dois dígitos, um mês de um ou dois dígitos e um ano de dois ou quatro dígitos, com cada componente separado por um espaço, barra, hífen ou ponto. Todos os três componentes devem estar presentes e seguir a definição DATEFORMAT. Se qualquer um dos três campos possuir quatro dígitos, será interpretado como o ano, e os outros dois campos devem seguir a ordem estipulada pela definição DATEFORMAT.



Exemplo: Como Utilizar o Formato de String Formatada

A seguir, você encontra exemplos de constantes de data de string formatada que especificam 20 de maio de 1999:

1999/05/20
5 20 1999
99.05.20
1999-05-20


x
Formato de String Traduzida

O formato dastring traduzida contém o nome do mês abreviado ou completo. O ano também deve estar presente, com dois ou quatro dígitos. Se o dia estiver faltando, supõe-se que se refere ao primeiro dia do mês. Se estiver presente, poderá ter um ou dois dígitos. Se a string contiver um ano de dois dígitos e um dia de dois dígitos, eles deverão estar na ordem estabelecida pela definição DATEFORMAT.



Exemplo: Como Utilizar o Formato de String Traduzida

A data a seguir está no formato de string traduzida:

January 6 2000


x
Formato de Hora

Os componentes de tempo são separados por dois pontos e podem ser seguidos de A.M., P.M., a.m. ou p.m.

Segundos podem ser expressos com um ponto decimal ou serem seguidos por um ponto e vírgula. Se houver dois pontos após os segundos, o valor a seguir representará milissegundos. Não há como se expressar microssegundos ou nanossegundos utilizando esta notação.

Um ponto decimal no valor de segundos indica a fração decimal de um segundo. Microssegundos podem ser representados utilizando seis dígitos decimais. Nanossegundos podem ser representados utilizando nove dígitos decimais.



Exemplo: Como Utilizar Formatos de Hora

A seguir, você encontra exemplos de formatos de tempo aceitáveis:

14:30:20:99       (99 milliseconds)
14:30
14:30:20.99       (99/100 seconds)
14:30:20.999999   (999999 microseconds)
02:30:20:500pm


Exemplo: Como Utilizar Valores de Entrada Data-Hora Universais

Com as definições DTSTANDARD de STANDARD e STANDARDU, os valores data-hora a seguir podem ser lidos como entrada:

Valor de Entrada

Descrição

14:30[:20,99]

A vírgula separa componentes de tempo em vez do ponto final

14:30[:20.99]Z

Hora universal

15:30[:20,99]+01
15:30[:20,99]+0100
15:30[:20,99]+01:00 

Cada um destes é o mesmo que acima, no Horário Europeu Central

09:30[:20.99]-05

Mesmo que acima no Horário Padrão do Leste

Observe que estes valores são armazenados internamente de forma idêntica com a definição STANDARDU. Com a definição STANDARD, tudo o que segue Z, + ou - é ignorado.



x
Como Atribuir Valores Data-Hora

Como:

Um valor data-hora é uma constante em formato de caractere atribuído por um dos seguintes:

Uma constante data-hora pode possuir espaços vazios no início ou fim ou imediatamente antes do indicador am/pm.



x
Sintaxe: Como Atribuir Valores Data-Hora

Em um arquivo de caracteres

date_string [time_string]

ou

time_string [date_string]

Em uma expressão COMPUTE, DEFINE ou WHERE

DT(date_string [time_string])

ou

DT(time_string [date_string])

Em uma expressão IF

'date_string [time_string]'

ou

'time_string [date_string]'

onde:

time_string

É a string de hora no formato aceitável. Uma string de hora pode possuir um espaço em branco imediatamente anterior a um indicador am/pm.

date_string

É uma string de data no formato de string numérica, formatada ou traduzida.

Em um critério IF, se o valor não contiver espaços em branco ou caracteres especiais, as aspas simples não são necessárias.

Observação: As strings de data e hora devem ser separadas por pelo menos um espaço em branco. Espaços em branco também são permitidos no início e no fim da string data-hora.



Exemplo: Como Atribuir Literais Data-Hora

O prefixo DT pode ser utilizado em uma expressão COMPUTE, DEFINE ou WHERE para atribuir umliteral data-hora a um campo data-hora. Por exemplo:

DT2/HYYMDS = DT(20051226 05:45);                                
DT3/HYYMDS = DT(2005 DEC 26 05:45);                              
DT4/HYYMDS = DT(December 26 2005 05:45);   


Exemplo: Como Atribuir um Valor Data-Hora em um Comando COMPUTE

A seguir, a função DT é utilizada em um comando COMPUTE para criar um novo campo contendo um valor data-hora atribuído.

TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME AND COMPUTE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
WHERE CURR_JOBCODE LIKE 'B%'
END

A saída é:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM


Exemplo: Como Atribuir um Valor Data-Hora em Critérios WHERE

A seguir, a função DT é utilizada para criar um novo campo contendo um valor data-hora atribuído. Este valor é utilizado como um critério WHERE.

DEFINE FILE EMPLOYEE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
END
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME
WHERE RAISETIME EQ DT(20000101 09:00AM)
END

A saída é:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
STEVENS       ALFRED           $12,100.00  2000/01/01  9:00AM
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
SMITH         RICHARD          $10,450.00  2000/01/01  9:00AM
BANNING       JOHN             $32,670.00  2000/01/01  9:00AM
IRVING        JOAN             $29,548.20  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM
GREENSPAN     MARY              $9,900.00  2000/01/01  9:00AM
CROSS         BARBARA          $29,768.20  2000/01/01  9:00AM


Exemplo: Como Atribuir um Valor Data-Hora em Critérios IF

A seguir, a função DT é utilizada para criar um novo campo contendo um valor data-hora atribuído. Este valor é utilizado como um critério IF.

DEFINE FILE EMPLOYEE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
END
 
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME
IF RAISETIME EQ '20000101 09:00AM'
END

A saída é:

LAST_NAME     FIRST_NAME           NEWSAL  RAISETIME
---------     ----------           ------  ---------
STEVENS       ALFRED           $12,100.00  2000/01/01  9:00AM
SMITH         MARY             $14,520.00  2000/01/01  9:00AM
JONES         DIANE            $20,328.00  2000/01/01  9:00AM
SMITH         RICHARD          $10,450.00  2000/01/01  9:00AM
BANNING       JOHN             $32,670.00  2000/01/01  9:00AM
IRVING        JOAN             $29,548.20  2000/01/01  9:00AM
ROMANS        ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY         JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD     ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT      ROGER            $17,710.00  2000/01/01  9:00AM
GREENSPAN     MARY              $9,900.00  2000/01/01  9:00AM
CROSS         BARBARA          $29,768.20  2000/01/01  9:00AM

Information Builders