Date formats

DATE FORMATS

Oracle Server slaat data op in intern binair formaat, welke onafhankelijk is van culturele conventies die overal ter wereld gebruikt worden.

Data worden opgeslagen in de Gregoriaanse kalender en bestaat uit binair gecodeerd jaar (4 cijfers), maand, dag, uur,
minuten en seconden.

Als data gepresenteerd moeten worden door een applicatie, moeten ze geconverteerd worden naar tekstformaat. De tegenovergestelde conversie vind plaats genruikers input moet. Het tekstformaat kan geselecteerd worden zodat deze overeenkomt met de datumconventie die door de eindgebruiker gebruikt wordt.

Formats worden omschreven door strings, en worden ‘format models’ genoemd.

EXPLICT EN IMPLICT FORMAT MODELS

Applicaties kunnen expliciet om conversie tussen intern binair formaat en extern tekst formaat met de TO_CHAR en TO_DATE SQL functies. De conversie kan ook aangeroepen worden door aan te geven date en datum waarde opgeslagen moet worden in of gelezen moet worden van een tekst variabele. Weergave velden in applicaties komen vaak overeen met zulke tekstvariabelen

Bij het gebruik van TO_CHAR en TO_DATE is het toegestaan om format models als 2de argument te gebruiken bij de functie. Dit formaat overruled elke default die later beschreven wordt.

Voorbeeld:

SQL> select to_char(sysdate,'dd.mm.yyyy') date1,

  to_char(sysdate,'yyyy/mm/dd') date2

from dual;

DATE1 DATE2

---------- ----------

18.02.2008 2008/02/18


Wanneer het tweede argument wordt toegevoegd of wanneer impliciete conversie plaatsvindt, zal het format model bepaald worden door de huidige waarde van de NLS_DATE_FORMAT setting. Deze waarde kan gecontroleerd wordem in de NLS_SESSION_PARAMETERS view.

 

Voorbeeld:

SQL> select * from nls_session_parameters
             where parameter='NLS_DATE_FORMAT';

PARAMETER
--------------------------------------------
VALUE
--------------------------------------------

NLS_DATE_FORMAT
DD-MM-RR


SQL> select sysdate from dual;

SYSDATE
--------
18-02-08

De NLS_DATE_FORMAT setting

De NLS_DATE_FORMAT setting kan gespecificeerd worden in de applicatie omgeving of in de init.ora file. De waarde van de omgeving wordt gebruikt als de NLS_LANG setting ook gedefinieerd is. De INIT.ORA waarde wordt gebruikt als NLS_LANG niet is gedefinieerd.

De NLS_DATE_FORMAT parameter hoeft niet expliciet gedefinieerd te worden. Iedere territory die door Oracle gesupport wordt heeft een default format model die daar bij hoort als NLS_LANG wordt gespecificeerd in de applicatie omgeving maar de NLS_DATE_FORMAT setting is niet expliciet aanwezig in deze omgeving, dan zal het default format model die in het tweede deel van de NLS_LANG waarde van de geldende territory weergegeven wordt gelden. De territory zelf, indien niet gespecificeerd krijgt als default het ‘language’ deel van de NLS_LANG.

Let er op dat de waarde van de INIT.ORA in dit geval wordt genegeerd.

Als NLS_LANG niet gespecificeerd wordt in de omgeving en NLS_DATE_FORMAT wordt niet gespecificeerd in de INIT.ORA file, dan zal de default date format model, de territory die gespecificeerd wordt in de the NLS_TERRITORY setting in de INIT.ORA, worden. Deze setting zelf heeft als default AMERICA.

 

Het gebruik van het ALTER SESSION commando

 

Het ALTER SESSION commando kan gebruikt worden om de NLS_DATE_FORMAT setting gedurende een sessie te veranderen.

voorbeeld:

SQL> select * from nls_session_parameters
             where parameter='NLS_DATE_FORMAT';

 

PARAMETER
--------------------------------------------------------------
VALUE
--------------------------------------------------------------
NLS_DATE_FORMAT
DD-MM-RR

 

 

SQL> select sysdate from dual;

 

SYSDATE
--------
18-02-08

 

SQL> alter session set nls_date_format='dd.mm.yyyy';

 

Session altered.

 

SQL> select * from nls_session_parameters

2 where parameter='NLS_DATE_FORMAT';

 

PARAMETER
--------------------------------------------------------------
VALUE
--------------------------------------------------------------
NLS_DATE_FORMAT

dd.mm.yyyy

 

 

SQL> select sysdate from dual;

 

SYSDATE
----------
18.02.2008



Als ALTER SESSION wordt gebruikt om de huidige territory setting te veranderen, wordt de NLS_DATE_FORMAT ook veranderd naar de default voor deze territory.

Voorbeeld:

SQL> select * from nls_session_parameters 
where parameter='NLS_DATE_FORMAT';

PARAMETER
-----------------------------------------------
VALUE
------------------------------------------------
NLS_DATE_FORMAT

dd.mm.yyyy

SQL> alter session set nls_territory=america;

Session altered.

SQL> select * from nls_session_parameters

where parameter='NLS_DATE_FORMAT';

PARAMETER
------------------------------------------------
VALUE
------------------------------------------------

NLS_DATE_FORMAT

DD-MON-RR

 

Laat DEFAULT DATE FORMATS voor TERRITORIES zien

De default date format models voor territories in Oracle kan tussen versies verschillen. Extra territories kunnen toegevoegd worden en sommige kunnen wegvallen. Hierdoor is het moeilijk om een lijst bij te houden van deze defaults.

Het SQL*Plus script hieronder gebruikt het van gedrag van het ALTER SESSION SET NLS_TERRITORY, zoals net beschreven, om een lijst te creëren van de defaults van alle default date format models voor alle territories supported door de opgegeven Oracle Server Instance.

Eerst het SQL*Plus script maken met de naam dateformat.sql":

SET ECHO OFF 
SET HEADING OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET PAGESIZE 0
SPOOL dateformat.tmp
SELECT
'ALTER SESSION SET NLS_TERRITORY="'||value||'";' || CHR(10) ||
'SELECT p1.value, p2.value
FROM nls_session_parameters p1, nls_session_parameters p2
WHERE p1.parameter = ''NLS_TERRITORY'' AND
p2.parameter = ''NLS_DATE_FORMAT'';' || CHR(10)
FROM v$nls_valid_values
WHERE parameter = 'TERRITORY'
ORDER BY value;
SPOOL OFF
SPOOL datefrm.lst
SPOOL OFF
EXIT

 

Vervolgens het script dateformat.sql runnen

Het script produceerd 2 files : "dateforma.tmp" (deze kan weggegooid worden) en
"dateformat.lst". "dateformat.lst" zal de lijst bevatten met de default formats.

 

De NLS_DATE_LANGUAGE SETTING

Als het date format model een element bevat die overeenkomt met een maand naam,, afkortingen van deze namen of AM/PM/AD/BC date afkortingen, dan zal de language van deze elementen in de tekst versie van een date waarde, bepaald worden door de NLS_DATE_LANGUAGE setting. Deze setting wordt bepaald door een vergelijkbare manier als de to NLS_DATE_FORMAT, behalve dat zij default wordt bepaald door de, geschikte, de language (of wel het eerste) deel van de NLS_LANG setting of de NLS_LANGUAGE parameter in de INIT.ORA file. een naam een dag in de week

Het heeft geen zin om een lijst van default values van NLS_DATE_LANGUAGE voor de vesrchillende waarden te laten zien omdat deze waarden altijd matchen.

Voorbeeld:

SQL> select * from nls_session_parameters 
where parameter in ('NLS_DATE_LANGUAGE', 'NLS_DATE_FORMAT');

PARAMETER
-------------------------------------------------------------------
VALUE
-------------------------------------------------------------------
NLS_DATE_FORMAT
DD-MM-RR

NLS_DATE_LANGUAGE
DUTCH

SQL> select sysdate from dual;
SYSDATE
--------
19-02-08

SQL> alter session set nls_date_language=polish;
Session altered.

SQL> select * from nls_session_parameters
where parameter in ('NLS_DATE_LANGUAGE', 'NLS_DATE_FORMAT');

PARAMETER
-------------------------------------------------------------------
VALUE
-------------------------------------------------------------------
NLS_DATE_FORMAT
DD-MM-RR

NLS_DATE_LANGUAGE
POLISH

SQL> alter session set nls_language=hungarian;
Session altered.

SQL> select * from nls_session_parameters
where parameter in ('NLS_DATE_LANGUAGE', 'NLS_DATE_FORMAT');

PARAMETER
-------------------------------------------------------------------
VALUE
-------------------------------------------------------------------
NLS_DATE_FORMAT
DD-MM-RR

NLS_DATE_LANGUAGE
HUNGARIAN

De NLS_DATE_LANGUAGE kan als volgt gespecificiceerd worden in het derde derde argument van de TO_CHAR en TO_DATE functies:

 SQL> select to_char(sysdate,'dd.mon.yyyy',
'nls_date_language=hungarian') date1,
to_char(sysdate,'dd.mon.yyyy',
'nls_date_language=polish') date2
from dual
/

DATE1 DATE2
-------------------------------- --------------------
19.febr. .2008 19.lut.2008

 

Zie ook het script CHARACTERSET op de SCRIPT sectie op de homepage

 

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 301 gasten online