Nesta seção: |
As funções descritas nesta seção operam em campos no formato data-hora (às vezes chamado de formato H).
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.
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.
SET DATEFORMAT = option
onde:
Pode ser um dos seguintes: MDY, DMY, YMD OU MYD. MDY é o valor padrão para o formato do inglês americano.
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
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.
SET WEEKFIRST = value
onde:
Pode ser:
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.
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.
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.
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
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.
SET DTSTRICT = {ON|OFF}
onde:
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).
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.
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.
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 |
|
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:
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.
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.
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 |
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.
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
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.
A data a seguir está no formato de string traduzida:
January 6 2000
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.
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
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.
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.
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:
É 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.
É 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.
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);
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
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
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 |