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
FIQTR: Como Obter o Trimestre Fiscal
FIYYQ: Como Converter uma Data em uma Data Fiscal
TODAY: Como Obter a Data Atual
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.
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.
SET BUSDAYS = smtwtfs
onde:
É 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:
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.
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
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:
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.
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.
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:
É uma string de texto com quatro caracteres.
SET HDAY = xxxx
onde:
É a parte do nome do arquivo de feriados após HDAY. Esta string deve ter quatro caracteres.
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
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:
É 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.
É o nome do aplicativo no qual o arquivo de feriados reside.
É o caminho para o arquivo de feriados.
É 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:
É 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.
É 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.
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:
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
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
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.
SET LEADZERO = {ON|OFF}
onde:
Exibe zeros à esquerda (caso presentes).
Trunca zeros à esquerda. OFF é o valor padrão.
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 |