Como Utilizar Funções de Data Padrão

Nesta seção:

Ao utilizar funções padrão de data, você precisará de conhecimento sobre as definições que alteram o comportamento destas funções, assim como os formatos aceitáveis e como fornecer valores nestes formatos.

Você pode afetar este comportamente de funções de data das seguintes formas:

Para obter informações detalhadas sobre cada função de data padrão, consulte:

DATEADD: Como Adicionar ou Subtrair uma Unidade de Data a Partir de/Para uma Data

DATECVT: Como Converter o Formato de uma Data

DATEDIF: Como Encontrar a Diferença entre Duas Datas

DATEMOV: Como Mover uma Data para um Ponto Importante

DATETRAN: Como Formatar Datas em Formatos Internacionais

DPART: Como Extrair um Componente de uma Data

FIYR: Como Obter o Ano Fiscal

FIQTR: Como Obter o Trimestre Fiscal

FIYYQ: Como Converter uma Data em uma Data Fiscal

TODAY: Como Obter a Data Atual


Topo da página

x
Como Especificar Dias de Trabalho

Nesta seção:

Você pode determinar quais dias são dias de trabalho e quais não são. Dias de trabalho afetam as funções DATEADD, DATEDIF e DATEMOV. Você pode identificar dias de trabalho como dias úteis ou feriados.



x
Como Especificar Dias Úteis

Tradicionalmente, os dias úteis vão de segunda a sexta, mas nem toda empresa possui este calendário. Por exemplo, se sua empresa faz negócios aos domingos, terças, quartas, sextas e sábados, você pode criar unidades de dias úteis para refletir este calendário.



x
Sintaxe: Como Definir Dias Úteis
SET BUSDAYS = smtwtfs							

onde:

smtwtfs

É a lista de sete caracteres de dias que representa a sua semana útil. A lista possui uma posição para cada dia de domingo a sábado:

  • Para identificar um dia da semana como dia útil, insira a primeira letra do dia naquela posição.
  • Para identificar um dia não útil, insira um underscore (_) nesta posição.

Se uma letra não estiver na posição correta ou se você substituí-la por um caractere diferente do underscore, você receberá uma mensagem de erro.



Exemplo: Como Definir Dias Úteis para Refletir Sua Semana de Trabalho

A seguir, você encontra informações sobre como designar dias de trabalho como domingo, terça, quarta, sexta e sábado:

SET BUSDAYS = S_TW_FS


x
Sintaxe: Como Visualizar a Definição Atual de Dias Úteis
? SET BUSDAYS


x
Como Especificar Feriados

Você pode especificar uma lista de datas designadas como feriados na sua empresa. Estas datas são excluídas quando se utiliza funções que desempenham cálculos com base em dias de trabalho. Por exemplo, se a quinta-feira de uma determinada semana for marcada como um feriado, o próximo dia de trabalho após quarta-feira será sexta-feira.

Para definir uma lista de feriados, você deve:

  1. Crie um arquivo de feriados utilizando um editor de texto padrão.
  2. Selecione o arquivo de feriados através da emissão do comando SET com o parâmetro HDAY.


x
Referência: Regras para a Criação de um Arquivo de Feriados
  • As datas devem estar no formato YYMD.
  • As datas devem estar em ordem crescente.
  • Cada data deve estar na sua própria linha.
  • Cada ano para o qual os dados existem deve ser incluído ou o arquivo de feriados é considerado inválido. Chamar uma função de data com um valor de data fora do intervalo do arquivo de feriados exibe um zero para solicitações de dias úteis.

    Se você estiver subtraindo duas datas em 2005 e a data mais próxima do presente no arquivo de feriados for 20041231, a subtração não será efetuada. Uma forma de se evitar a invalidação do arquivo de feriados é colocar uma data bem distante no futuro em qualquer arquivo de feriados que você criou (por exemplo, 29991231) e, em seguida, ela será considerada válida.

  • Você pode incluir uma descrição opcional do feriado, separado a partir da data por um espaço.

Por padrão, o arquivo de feriados possui um nome de arquivo do formulário HDAYxxxx.err e está no seu caminho (ou no z/OS na implantação PDS), é um membro de nome HDAYxxxx de um PDS alocado em DDNAME ERRORS. No seu procedimento ou solicitação, é necessário emitir o comando SET HDAY=xxxxpara identificar o nome do arquivo ou membro. Como alternativa, você pode definir o arquivo para levar qualquer nome e ser armazenado em qualquer lugar ou, no z/OS na implantação PDS, alocar o arquivo de feriados como um arquivo sequencial com qualquer nome ou como um HDAY membro xxxx de qualquer PDS. Para obter informações sobre como utilizar nomes de arquivos de feriados fora do padrão, consulte Como Utilizar FILEDEF ou DYNAM no Arquivo de Feriados.



x
Procedimento: Como Criar Arquivo de Feriados
  1. Em um editor de texto, crie uma lista de datas designadas como feriados utilizando as Regras para a Criação de um Arquivo de Feriados.
  2. Salve o arquivo.

    Se você não estiver utilizando a convenção de nomenclatura padrão, consulte Como Utilizar FILEDEF ou DYNAM no Arquivo de Feriados. Se você estiver utilizando a convenção de nomenclatura padrão, utilize as instruções a seguir:

    No Windows e UNIX: O arquivo deve ser HDAYxxxx.ERR

    No z/OS: O arquivo deve ser ummembro de ERRORS com nome HDAYxxxx.

    onde:

    xxxx

    É uma string de texto com quatro caracteres.



x
Sintaxe: Como Selecionar um Arquivo de Feriados
SET HDAY = xxxx							

onde:

xxxx

É a parte do nome do arquivo de feriados após HDAY. Esta string deve ter quatro caracteres.



Exemplo: Como Criar e Selecionar um Arquivo de Feriados

A seguir, você encontra o arquivo HDAYTEST, que estabelece feriados:

19910325 TEST HOLIDAY
19911225 CHRISTMAS

A seguir, você encontra informações sobre como definir HDAYTEST como o arquivo de feriados:

SET BUSDAYS = SMTWTFS
SET HDAY = TEST

Esta solicitação utiliza HDAYTEST em seus cálculos:

TABLE FILE MOVIES
PRINT TITLE RELDATE
COMPUTE NEXTDATE/YMD = DATEADD(RELDATE, 'BD', 1);
WHERE RELDATE GE '19910101';
END

A saída é:

TITLE                                    RELDATE   NEXTDATE
-----                                    -------   --------
TOTAL RECALL                             91/03/24  91/03/26


x
Sintaxe: Como Utilizar FILEDEF ou DYNAM no Arquivo de Feriados

Em todos os ambientes, exceto no z/OS na implantação PDS, utilize a sintaxe a seguir.

FILEDEF HDAYxxxx DISK {app/|path}/filename.ext							

onde:

HDAYxxxx

É o nome lógico (DDNAME) do arquivo de feriados, onde xxxx é formado por quaisquer quatro caracteres. Você pode estabelecer este nome lógico emitindo o comando SET HDAY=xxxx no seu procedimento ou solicitação.

aplicativo

É o nome do aplicativo no qual o arquivo de feriados reside.

caminho

É o caminho para o arquivo de feriados.

Nome do arquivo.ext

É o nome do arquivo de feriados.

No z/OS na implantação PDS, utilize as seguintes informações para alocar um arquivo de feriados sequencial.

DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix SHR REU

No z/OS na implantação PDS, utilize as seguintes informações para alocar um arquivo de feriado que é membro de um PDS.

DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix(HDAYxxx) SHR REU

onde:

HDAYxxxx

É o DDNAME para o arquivo de feriados. O seu FOCEXEC ou solicitação devem definir o parâmetro HDAY como xxxx, onde xxxx é quaisquer quatro caracteres de sua escolha. Se o seu arquivo de feriados for um membro de um PDS, HDAYxxxx também deve ser um nome de membro.

qualif.Nome do arquivo.sufixo

É o nome totalmente qualificado do arquivo sequencial que contém a lista de feriados ou o PDS com o HDAYxxxx membro que contém a lista de feriados.



Exemplo: Definir um Arquivo de Feriados

O arquivo de feriados a seguir, de nome holiday.data no diretório c:\temp do Windows, define 3 de novembro de 2011 e 24 de dezembro de 2011 como feriados:

20111103
20111224

A solicitação a seguir em relação à fonte de dados MOVIES utiliza o comando FILEDEF para definir este arquivo como o arquivo de feriado. O nome lógico no comando FILEDEF é HDAYMMMM, e o procedimento emite o comando SET HDAY=MMMM. Em seguida, ele define a data 2 de novembro de 2011 e calcula o próximo dia útil:

FILEDEF HDAYMMMM DISK c:\ibi\holiday.data
SET HDAY = MMMM                                      
SET BUSDAYS = _MTWTF_                                
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1); 
END
TABLE FILE MOVIES                                    
SUM COPIES NEWDATE NEXTDATE                                 
ON TABLE SET PAGE NOPAGE   
END

A saída mostra que o próximo dia útil após 2 de novembro é 4 de novembro, pois 3 de novembro é um feriado:



Exemplo: Como Alocar o Arquivo de Feriados a um Aruivo Sequencial na z/OS na Implantação do PDS

O arquivo sequencial a seguir, chamado USER1.HOLIDAY.DATA, define 3 de novembro de 2011 e 24 de dezembro de 2011 como feriados:

20111103
20111224

A solicitação a seguir em relação à fonte de dados MOVIES utiliza o comando DYNAM para alocar este arquivo como o arquivo de feriado. o DDNAME no comando DYNAM é HDAYMMMM, e o procedimento emite o comando SET HDAY=MMMM. Em seguida, ele define a data 2 de novembro de 2011 e calcula o próximo dia útil:

DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA SHR REU
SET HDAY = MMMM
SET BUSDAYS = _MTWTF_
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1);
END
TABLE FILE MOVIES
SUM COPIES NEWDATE NEXTDATE
ON TABLE SET PAGE NOPAGE
END

A saída mostra que o próximo dia útil após 2 de novembro é 4 de novembro, pois 3 de novembro é um feriado:

COPIES  NEWDATE     NEXTDATE  
------  -------     --------  
   117  2011/11/02  2011/11/04


Exemplo: Como Alocar o Arquivo de Feriados a um Membro PDS na z/OS na Implantação do PDS

O arquivo de feriados a seguir, membro HDAYMMMM em um PDS de nome USER1.HOLIDAY.DATA, define 3 de novembro de 2011 e 24 de dezembro de 2011 como feriados:

20111103
20111224

A solicitação a seguir em relação à fonte de dados MOVIES utiliza o comando DYNAM para alocar este arquivo como o arquivo de feriado. O DDNAME no comando DYNAM é HDAYMMMM, o nome do membro também é HDAYMMMM, e o procedimento emite o comando SET HDAY=MMMM. Em seguida, ele define a data 2 de novembro de 2011 e calcula o próximo dia útil:

DYNAM ALLOC DD HDAYMMMM DA USER1.HOLIDAY.DATA(HDAYMMMM) SHR REU
SET HDAY = MMMM
SET BUSDAYS = _MTWTF_
DEFINE FILE MOVIES
NEWDATE/YYMD = '20111102';
NEXTDATE/YYMD = DATEADD(NEWDATE, 'BD', 1);
END
TABLE FILE MOVIES
SUM COPIES NEWDATE NEXTDATE
ON TABLE SET PAGE NOPAGE
END

A saída mostra que o próximo dia útil após 2 de novembro é 4 de novembro, pois 3 de novembro é um feriado:

COPIES  NEWDATE     NEXTDATE  
------  -------     --------  
   117  2011/11/02  2011/11/04

Topo da página

x
Como Permitir Zeros à Esquerda para Funções de Data e Hora no Dialogue Manager

Como:

Se você utiliza uma função de data e hora no Dialogue Manager que exibe um formato inteiro numérico, o Dialogue Manager trunca quaisquer zeros à esquerda. Por exemplo, se uma função exibir o valor 000101 (que indica janeiro 1, 2000), o Dialogue Manager irá truncar os zeros à esquerda produzindo 101, uma data incorreta. Para evitar este problema, utilize o parâmetro LEADZERO.

LEADZERO suporta apenas uma expressão que faz uma chamada direta para uma função. Uma expressão que possui aninhamento ou outra função matemática sempre truncará zeros à esquerda. Exemplo,

-SET &OUT = AYM(&IN, 1, 'I4')/100;

trunca os zeros à esquerda independentemente da definição do parâmetro LEADZERO.



x
Sintaxe: Como Definir a Exibição de Zeros à Esquerda
SET LEADZERO = {ON|OFF}

onde:

ATIVADO

Exibe zeros à esquerda (caso presentes).

OFF

Trunca zeros à esquerda. OFF é o valor padrão.



Exemplo: Como Exibir Zeros à Esquerda

A função AYM adiciona um mês à data de entrada de dezembro de 1999:

-SET &IN = '9912';
-RUN
-SET &OUT = AYM(&IN, 1, 'I4');
-TYPE &OUT

A utilização da definição padrão LEADZERO resulta em:

1

Isto representa a data Janeiro 2000 de forma incorreta. Como Definir o parâmetro LEADZERO na solicitação:

SET LEADZERO = ON
-SET &IN = '9912';
-SET &OUT = AYM(&IN, 1, 'I4');
-TYPE &OUT

resultados a seguir:

0001

Isto indica corretamente Janeiro 2000.


Information Builders