In questa sezione: |
Quando si utilizzano le funzioni data standard, è necessario capire le impostazioni che alterano il comportamento di queste funzioni, come anche i formati consentiti e come fornire valori in questi formati.
È possibile influenzare il comportamento delle funzioni data nei seguenti modi:
Per informazioni dettagliate su ciascuna funzione data legacy, consultare:
DATEADD: Aggiungere o sottrarre una unità data a o da una data
DATECVT: Conversione del formato di una data
DATEDIF: Ricerca della differenza tra due date
DATEMOV: Spostamento di una data a un punto significativo
DATETRAN: Formattazione date in formati internazionali
DPART: Estrazione di un componente da una data
FIYR: Ottenimento dell'anno finanziario
FIQTR: Ottenimento del trimestre finanziario
FIYYQ: Conversione di una data calendario in una data finanziaria
TODAY: Restituzione della data corrente
In questa sezione: |
È possibile determinare quali giorni sono lavorativi e quali sono festivi. I giorni lavorativi influenzano le funzioni DATEADD, DATEDIF e DATEMOV È possibile identificare i giorni lavorativi come giorni aziendali o festività.
I giorni lavorativi sono, di solito, da Lunedì a Venerdì, ma non tutte le aziende presentano la stessa agenda. Per esempio, se la propria compagnia non lavora la Domenica, il Martedì, il Mercoledì, il Venerdì e il Sabato, è possibile personalizzare le unità dei giorni per riflettere quell'agenda.
SET BUSDAYS = smtwtfs
dove:
L'elenco a sette caratteri dei giorni che rappresentano la propria aziendale. L'elenco ha una posizione per ciascun giorno da Domenica a Sabato:
Se una lettera non si trova nella sua posizione corretta, o se si sostituisce una lettera con un caratere diverso da un simbolo di sottolienatura, si riceve un messaggio di errore.
Il seguente progetta giorni lavorativi come Domenica, Martedì, Mercoledì, Venerdì e Sabato:
SET BUSDAYS = S_TW_FS
È possibile specificare un elenco di date progettate come festività nella propria azienda. Queste date sono escluse quando si usano funzioni che eseguono calcoli in base ai giorni lavorativi. Per esempio, se Giovedì in una data settimana è progettata come festività, il prossimo giorno lavorativo dopo Mercoledì è Venerdì.
Per definire un elenco di festività, è necessario:
Se si sta sottraendo due date nel 2005 e la data più recente nel file festività è 20041231, la sottrazione non verrà eseguita. Un modo per evitare l'invalidità del file festività è quello di emettere una data molto lontano nel tempo in ogni file festività creato (per esempio, 29991231) e, quindi, questo verrà considerato valido.
Per impostazione predefinita, il file festività presenta un nome file nella forma di HDAYxxxx.err e si trova sul proprio percorso, o in z/OS, in sviluppo PDS, è un membro chiamato HDAYxxxx di un PDS allocato a DDNAME ERRORS. Nella propria procedura o richiesta, è necessario emettere il comando SET HDAY=xxxx per identificare il file o il nome membro. In alternativa, è possibile definire il file per avere qualsiasi nome e memorizzarlo ovunque o, su z/OS in sviluppo PDS, allocare il file festività come file sequenziale d qualsiasi noe o come membro HDAYxxxx di qualsiasi PDS. Per informazioni sull'uso di nomi file festività non predefiniti, consultare Come FILEDEF o DYNAM il file festività.
Se non si sta usando la convenzione di nominazione predefinita, consultare Come FILEDEF o DYNAM il file festività. Se si sta usando la convenzione di nominazione predefinita, usare le seguenti istruzioni:
In Windows e UNIX: Il file deve essere HDAYxxxx.ERR
In z/OS: Il file deve essere un membro di ERRORS chiamato HDAYxxxx.
dove:
Una stringa di testo lunga quattro caratteri.
SET HDAY = xxxx
dove:
Parte del nome del file festività dopo HDAY. Questa stringa deve essere lunga quattro caratteri.
Il seguente è il file HDAYTEST, che stabilisce le festività
19910325 TEST HOLIDAY 19911225 CHRISTMAS
Il seguente imposta HDAYTEST come il file festività:
SET BUSDAYS = SMTWTFS SET HDAY = TEST
Questa richiesta usa HDAYTEST nei propri calcoli:
TABLE FILE MOVIES PRINT TITLE RELDATE COMPUTE NEXTDATE/YMD = DATEADD(RELDATE, 'BD', 1); WHERE RELDATE GE '19910101'; END
L'emissione è:
TITLE RELDATE NEXTDATE ----- ------- -------- TOTAL RECALL 91/03/24 91/03/26
In tutti gli ambienti, tranne z/OS sotto sviluppo PDS, usare la seguente sintassi.
FILEDEF HDAYxxxx DISK {app/|path}/filename.ext
dove:
Il nome logico (DDNAME) per il file festività, dove xxxx è qualsiasi stringa lunga quattro caratteri. Si stabilizza questo nome logico emettendo il comando SET HDAY=xxxx nella propria procedura o richiesta.
Il nome dell'applicazione dove si trova il file festività.
Percorso del file Festività.
Nome del file festività.
Su z/OS in sviluppo PDS, usare il seguente per allocare un file festività sequenziale.
DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix SHR REU
Su z/OS in sviluppo PDS, usare il seguente per allocare un file festività, ovvero un membro di un PDS.
DYNAM ALLOC {DD|FILE} HDAYxxxx DA qualif.filename.suffix(HDAYxxx) SHR REU
dove:
DDNAME per il file festività. Il proprio FOCEXEC o richiesta deve impostare il parametro HDAY su xxxx, dove xxxx è qualsiasi combinazione a quattro caratteri. Se il proprio file festività è un membro di un PDS, HDAY xxxx deve inoltre essere il nome del membro.
Il nome completamente qualificato del file sequenziale che contiene l'elenco di festività o il PDS con il membro HDAYxxxx che contiene l'elenco di festività.
Il seguente file festività, chiamato holiday.data nella directory c:\temp in Windows, definisce il 3 Novembre 2011 eil 24 Dicembre 2011 come festività:
20111103 20111224
La seguente richiesta rispetto all'origine dati MOVIES usa il comando FILEDEF per allocare questo file come file festività. Il nome logico nel comando FILEDEF è HDAYMMMM e la procedura emette il comando SET HDAY=MMMM. Definisce, quindi, la data 2 Novembre 2011 e calcola il prossimo giorno lavorativo:
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
L'emissione mostra che il prossimo giorno lavorativo dopo il 2 Novembre è il 4 Novembre, poiché il 3 Novembre è una festività:
Il seguente file sequenziale, chiamato USER1.HOLIDAY.DATA, definisce il 3 Novembre 2011 e il 24 Dicembre 2011 come festività:
20111103 20111224
La seguente richiesta rispetto all'origine dati MOVIES usa il comando DYNAM per allocare questo file come file festività. DDNAME nel comando DYNAM è HDAYMMMM e la procedura emette il comando SET HDAY=MMMM. Definisce, quindi, la data 2 Novembre 2011 e calcola il prossimo giorno lavorativo:
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
L'emissione mostra che il prossimo giorno lavorativo dopo il 2 Novembre è il 4 Novembre, poiché il 3 Novembre é una festività:
COPIES NEWDATE NEXTDATE ------ ------- -------- 117 2011/11/02 2011/11/04
Il seguente file festività, membro HDAYMMMM in un comando PDS USER1.HOLIDAY.DATA, definisce il 3 Novembre 2011 e il 24 Dicembre 2011 come festività:
20111103 20111224
La seguente richiesta rispetto all'origine dati MOVIES usa il comando DYNAM per allocare questo file come file festività. DDNAME nel comando DYNAM è HDAYMMMM, il nome membro è inoltre HDAYMMMM e la procedura emette il comando SET HDAY=MMMM. Definisce, quindi, la data 2 Novembre 2011 e calcola il prossimo giorno lavorativo:
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
L'emissione mostra che il prossimo giorno lavorativo dopo il 2 Novembre è il 4 Novembre, poiché il 3 Novembre é una festività:
COPIES NEWDATE NEXTDATE ------ ------- -------- 117 2011/11/02 2011/11/04
Come: |
Se si usa una funzione ora e data in Dialogue Manager che restituisce un fomato numerico intero, Dialogue Manager tronca qualsiasi zero iniziale. Per esempio, se una funzione restituisce il valore 000101 (indicando 1 Gennaio 2000), Dialogue Manager tronca gli zero iniziali, producendo 101, una data incorretta. Per evitare questo problema, usare il parametro LEADZERO.
LEADZERO supporta solo una espressione che fa una chiamata diretta ad una funzione. Una espressione che presenta nidificazione, o altre funzioni matematiche, tronca sempre gli zero iniziali. Ad esempio,
-SET &OUT = AYM(&IN, 1, 'I4')/100;
tronca gli zeri iniziali indipendentemente dall'impostazione del parametro LEADZERO.
SET LEADZERO = {ON|OFF}
dove:
Visualizza gli zeri iniziali se presenti.
Tronca gli zeri iniziali. Il valore predefinito è OFF.
La funzione AYM aggiunge un mese alla data di immissione del Dicembre 1999:
-SET &IN = '9912'; -RUN -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
Usando l'impostazione predefinita LEADZERO, si ottiene:
1
Si rappresenta la data di Gennaio 2000 in modo scorretto. Impostazione del parametro LEADZERO nella richiesta come segue:
SET LEADZERO = ON -SET &IN = '9912'; -SET &OUT = AYM(&IN, 1, 'I4'); -TYPE &OUT
risultati nel seguente:
0001
Questa data indica Gennaio 2000 in modo corretto.
WebFOCUS |