Uso delle funzioni data-ora

In questa sezione:

Le funzioni descritte in questa sezione operano su campi nel formato data-ora (delle volte chiamato formato H).


Inizio pagina

x
Parametri data-ora

In questa sezione:

Il parametro DATEFORMAT specifica l'ordine dei componenti data per alcuni tipi di valori data-ora. Il parametro WEEKFIRST specifica il primo giorno della settimana. Il parametro DTSTRICT determina l'estensione a cui i valori data-ora sono controllati per la validità.



x
Specificazione dell'ordine dei componenti data

Il parametro DATEFORMAT specifica l'ordine dei componenti della data (mese/giorno/anno), quando i valori di data e ora vengono immessi nei formati di stringa formattata e tradotta, descritti in Uso formati data-ora. Questo parametro trasforma il formato di immissione in un valore indipendente dal formato della variabile a cui è stato assegnato.



x
Sintassi: Come specificare l'ordine dei componenti data in un campo data-ora
SET DATEFORMAT = option							

dove:

opzione

In grado di usare uno dei seguenti: MDY, DMY, YMD o MYD. MDY è il valore predefinito per il formato inglese U.S.



Esempio: Uso del parametro DATEFORMAT

La seguente richiesta usa un valore letterale data naturale con componenti mese e giorno numerici ambigui (APR 04 05) come immissione alla funzione 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

Con DATEFORMAT impostato su MYD, il valore è stato interpretato come 5 Aprile 1904:

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


x
Specificazione del primo giorno della settimana per uso in funzioni data-ora

Il parametro WEEKFIRST specifica un giorno della settimana come inizio della settimana. Questo parametro si usa in computazioni settimana per funzioni HADD, HDIFF, HNAME, HPART e HYYWD. È inoltre in uso da parte di funzioni DTADD, DTDIFF, DTRUNC e DTPART. I valori predefiniti sono diversi per queste funzioni, come descritto in Come impostare un giorno come inizio della settimana. Il parametro WEEKFIRST non modifica il giorno del mese che corrisponde a ciascun giorno della settimana, ma specifica solo quale giorno viene considerato all'inizio della settimana.

Le subroutine HPART, DTPART, HYYWD e HNAME possono estrarre un numero della settimana da un valore data-ora. Per determinare il numero della settimana, è possibile usare diverse definizioni. Per esempio, la numerazione settimanale standard ISO 8601 definisce la prima settimana dell'anno come prima settimana di gennaio con quattro o più giorni. Qualsiasi giorno precedente a Gennaio appartiene alla settimana 52 o 53 dell'anno precedente. Lo stardard ISO inoltre stabilizza Lunedì come primo giorno della settimana.

Si specifica quale tipo di numerazione settimanale usare, impostando il parametro WEEKFIRST, come descritto in Come impostare un giorno come inizio della settimana.

Poiché il numero della settimana restituito dalle funzioni HNAME e DTPART può essere nell'anno corrente o nell'anno precedente o seguente, il solo numero della settimana potrebbe non essere utile. La funzione HYYWD restituisce sia l'anno che la settimana da un dato valore data-ora.



x
Sintassi: Come impostare un giorno come inizio della settimana
SET WEEKFIRST = value

dove:

valore

È in grado di essere:

  • Da 1 a 7, rappresentante da Domenica a Sabato con numerazione settimana non standard.

    La numerazione settimanale, con uso di questi valori, stabilizza la prima settimana di gennaio con sette giorni, come numero settimana 1. I giorni precedenti al mese di gennaio appartengono all'ultima settimana dell'anno precedente. Tutte le settimane hanno sette giorni.

  • ISO1 fino a ISO7, rappresentante Domenica a Sabato con numerazione settimana standad ISO.

    Nota: ISO è un sinonimo per ISO2.

    La numerazione settimanale, con uso di questi valori, stabilizza la prima settimana di gennaio con almeno quattro giorni, come numero settimana 1. I giorni precedenti al mese di gennaio appartengono all'ultima settimana dell'anno precedente. Tutte le settimane hanno sette giorni.

  • STD1 a STD7, in cui la cifra 1 (Domenica) a 7 (Sabato) indica il giorno iniziale della settimana.

    Nota: STD sena una cifra equivale a STD1.

    La numerazione settimanale, con uso di questi valore, risulta come segue. La numerazione settimanale 1 inizia il 1 gennaio e finisce nel giorno precedente al primo giorno della settimana. Per esempio, per STD1, la prima settimana termina nel primo Sabato dell'anno. La prima e l'ultima settimana potrebbero avere meno di sette giorni.

  • SIMPLE, che stabilizza il 1 gennaio come inizio della settimana 1, 8 gennaio è l'inizio della settimana 2, etc. Il primo giorno della settimana è, quindi, lo stesso del primo giorno dell'anno. L'ultima settimana (settimana 53) è lunga o uno o due giorni.
  • 0 (zero) è il valore dell'impostazione WEEKFIRST, prima che l'utente emetta una impostazione WEEKFIRST specifica. Le funzioni data-ora HPART, HNAME, HYYWD, HADD e HDIFF usano Sabato come inizio della settimana, quando l'impostazione WEEKFIRST è 0: Le funzioni semplificate DTADD, DTDIFF, DTRUNC e DTPART, come anche la stampa delle date troncate in settimane e il riconoscimento delle stringhe della costante date che contiene i numeri settimane, usano domenica come valore predefinito, quando l'impostazione WEEKFIRST è 0. Se l'utente imposta in modo esplicito WEEKFIRST in un altro valore, quel valore è in uso da parte di tutte le funzioni.


Esempio: Impostazione Domenica come inizio settimana

Il seguente designa Domenica come l'inizio della settimana, usando la numerazione settimanale non standard:

SET WEEKFIRST = 1


x
Sintassi: Come visualizzare l'impostazione corrente di WEEKFIRST
? SET WEEKFIRST

Questa azione restituisce il valore che indica l'algoritmo della numerazione settimanale e il primo giorno della settimana. Per esempio, il valore intero 1 restituisce Domenica con la nmerazione settimanale non standard.



x
Controllo del processo dei valori data-ora

L'elaborazione rigorosa controlla i valori data-ora, quando emessi da un utente finale, letti da un file di transazione, visualizzati o restituiti da una subroutine, per assicurare che rappresentino una data e un'ora validi. Per esempio, un mese numerico deve essere tra 1 e 12 e il giorno deve essere all'interno del numero di giorni per il mese specifico.



x
Sintassi: Come abilitare il processo rigoroso dei valori data-ora
SET DTSTRICT = {ON|OFF}

dove:

ATTIVO

Richiama il processo rigoroso. ON - È il valore predefinito.

L'elaborazione rigorosa controlla i valori data-ora, quando emessi da un utente finale, letti da un file di transazione, visualizzati o restituiti da una subroutine, per assicurare che rappresentino una data e un'ora validi. Per esempio, un mese numerico deve essere tra 1 e 12 e il giorno deve essere all'interno del numero di giorni per il mese specifico.

Se DTSTRICT è ATTIVO e il risultato sarebbe un valore data-ora invalido, la funzione restituisce il valore zero (0).

INATTIVO

Non richiama l'elaborazione rigida. I componenti Data-Ora possono avere qualsiasi valore all'interno i vincoli del numero di cifre decimali consentite nel campo. Per esempio, se il campo è un mese a due cifre, il valore è in grado di essere 12 o 99, ma non 115.


Inizio pagina

x
Fornitura di argomenti per funzioni data-ora

Riferimento:

Le funzioni data-ora possono operare su un componente di un valore data-ora. Questo argomento elenca i nomi e le abbreviazioni dei componenti validi per uso con queste funzioni.



x
Riferimento: Argomenti per uso con funzioni data e ora

I seguenti nomi di componenti, abbreviazioni valide e valori sono supportati come argomenti per le funzioni data-ora che li richiedono:

Nome componente

Abbreviazione

Valori Validi

year
yy

0001-9999

quarter
qq

1-4

month
mm

1-12 o un nome mese, a seconda della funzione.

day-of-year
dy

1-366

												day or day-of-month 											
dd

1-31 (I due nomi componenti sono equivalenti.)

week
wk

1-53

weekday
dw

1-7 (domenica-sabato)

hour
hh

0-23

minute
mi

0-59

second
ss

0-59

millisecond
ms

0-999

microsecond
mc

0-999999

nanosecond
ns

0-999999999

Nota:

  • Per un argomento che specifica una lunghezza di otto, dieci o 12 caratteri, usare otto per includere i millisecondi, dieci per includere i microsecondi e 12 per includere i nanosecondi nel valore restituito.
  • L'ultimo argomento è sempre un formato USAGE che indica il tipo di dati restituiti dalla funzione. Il tipo potrebbe essere A (alfanumerico), I (intero), D (doppia precisione virgola-mobile), H (ora-data) o un formato data (per esempio, YYMD).



x
Uso formati data-ora

In questa sezione:

Ci sono tre tipi di formati data validi nei valori data-ora: formato stringa numerica, formato stringa formattata e formato stringa tradotta. In ciascun formato, gli anni a due cifre sono interpretati usando i parametri DEFCENT e YRTHRESH.

I componenti ora sono separati da due punti e potrebbero essere anteceduti da A.M., P.M., a.m. o p.m.

Il parametro DATEFORMAT specifica l'ordine dei componenti della data (mese/giorno/anno) quando i valori di data e ora vengono immessi nei formati di stringa formattata e di stringa convertita. Questo parametro rende il formato di immissione di un valore indipendente dal formato della variabile a cui è stato assegnato.



x
Formato Stringa Numerica

Il formato stringa numerica è esattamente due, quattro, sei o otto cifre. Le stringhe a quattro cifre sono considerate come un anno (il secolo deve essere specificato) e il mese e il giorno sono impostati sul 1 Gennaio. Le stringhe a sei e otto cifre contengono due o quattro cifre per l'anno, seguite da due per il mese e due per il giorno. Poiché l'ordine di componente è fisso per questo formato, l'impostazione DATEFORMAT viene ignorata.

Se si incontra un formato stringa numerica più lunga di otto cifre, questo è trattato come una stringa data-ora combinata nel formato Hnn.



Esempio: Uso del Formato Stringa Numerica

I seguenti sono esempi di costanti data stringa numerica:

Stringa

Data

99

1 Gennaio, 1999

1999

1 Gennaio, 1999

19990201

1 Febbraio, 1999



x
Formato Stringa Formattata

Il formato stringa formattata contiene un giorno a una o due cifre, un mese a una o due cifre e un anno a due o quattro cifre, ciascun componente separato da uno spazio, sbarra, trattino o punto. Tutti e tre i componenti devono essere presenti e seguire l'impostazione DATEFORMAT. Se uno qualunque dei tre campi presenta quattro cifre, questo viene interpretato come l'anno e gli altri due campi devono seguire l'ordine dato dall'impostazione DATEFORMAT.



Esempio: Uso del formato stringa formattata

I seguenti sono esempi delle costanti data stringa numerica e specificano 20 Maggio, 1999:

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


x
Formato Stringa Tradotta

Il formato stringa tradotta contiene il nome mese abbreviato o completo. L'anno deve inoltre essere presente nel formato a due o quattro cifre. Se il giorno è mancante, si assume il giorno 1 del mese; se presente, è possibile avere una o due cifre. Se la stringa contiene sia il giorno che l'anno a due cifre, questi elementi devono essere nell'ordine dato dall'impostazione DATEFORMAT.



Esempio: Uso del formato stringa tradotta

La seguente data è in nel formato stringa tradotta:

January 6 2000


x
Formato Ora

I componenti ora sono separati da due punti e potrebbero essere anteceduti da A.M., P.M., a.m. o p.m.

È possibile esprimere i secondi con un punto decimale o farli seguire dai due punti. Se sono presenti i due punti dopo i secondi, il valore a seguire rappresenta i millisecondi. Non esiste alcun modo per esprimere i microsecondi o i nanosecondi usando questa annotazione.

Un punto decimale nel valore secondi indica la frazione decimale di un secondo. È possibile rappresentare i microsecondi usando sei cifre decimali. È possibile rappresentare i nanosecondi usando nove cifre decimali.



Esempio: Uso formati ora

I seguenti sono esempi dei formati ora accettabili:

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


Esempio: Uso dei valori d'immissione data-ora universali

Con le impostazioni DTSTANDARD di STANDARD e STANDARDU, è possibile leggere i seguenti valori data-ora come immissione:

Inserisci valore

Descrizione

14:30[:20,99]

La virgola, e non il punto, separa i componenti ora

14:30[:20.99]Z

Ora universale

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

Ciascuno di questi orari è lo stesso come sopra nell'ora dell'Europa Centrale

09:30[:20.99]-05

Uguale a sopra nel fuso orario orientale standard

Notare che questi valori sono memorizzati in modo identico, internamente, con l'impostazione STANDARDU. Con l'impostazione STANDARD, tutti gli elementi che seguono Z, +, o - sono ignorati.



x
Assegnazione Valori Data-Ora

Come:

Un valore data-ora è una costante nel formato carattere assegnato da uno dei seguenti:

Una costante data-ora è in grado di avere spazi vuoti all'inizio o alla fine o immediatamente precedente ad un indicatore am/pm.



x
Sintassi: Come assegnare valori data-ora

In un file carattere

date_string [time_string]

oppure

time_string [date_string]

In una espressione COMPUTE, DEFINE o WHERE

DT(date_string [time_string])

oppure

DT(time_string [date_string])

In una espressione IF

'date_string [time_string]'

oppure

'time_string [date_string]'

dove:

time_string

Una stringa ora in formato accettabile. Una stringa ora è in grado di avere uno spazio immediatamente prima dell'indicatore am/pm.

date_string

Una stringa data in formato stringa numerica, stringa formattata o stringa tradotta.

In un criterio IF, se il valore non contiene spazi vuoti o caratteri speciali, le virgolette singole non sono necessarie.

Nota: Le stringhe data e ora devono essere separate da almeno uno spazio vuoto. Gli spazi vuoti sono inoltre consentiti all'inizio e alla fine della stringa ora-data.



Esempio: Assegnazione valori letterali data-ora

È possibile usare il prefisso DT in una espressione COMPUTE, DEFINE o WHERE, per assegnare un valore letterale data-ora in un campo data-ora. Per esempio:

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


Esempio: Assegnazione di un valore data-ora in un comando COMPUTE

Il seguente usa la funzione DT in un comando COMPUTE, per creare un nuovo campo contenente un valore data-ora assegnato.

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

L'emissione è:

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


Esempio: Assegnazione di un valore data-ora nel criterio WHERE

Il seguente usa la funzione DT per creare un nuovo campo contenente un valore data-ora assegnato. Questo valore viene, quindi, usato in un criterio 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

L'emissione è:

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


Esempio: Assegnazione di un valore data-ora nel criterio IF

Il seguente usa la funzione DT per creare un nuovo campo contenente un valore data-ora assegnato. Questo valore viene, quindi, usato come criterio 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

L'emissione è:

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

WebFOCUS