Database.Guide

in de Oracle-Database kunnen tijdzones op verschillende plaatsen worden ingesteld. Hieronder vindt u vier manieren om de tijdzone te wijzigen bij het gebruik van Oracle.

de tijdzone van de Database instellen

u kunt de tijdzone van de database instellen bij het aanmaken van de database. Gebruik hiervoor de SET TIME_ZONE – clausule van het CREATE DATABASE – statement.

voorbeeld:

CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

In dit geval gebruikte ik een tijdzone Regio Naam. Zie hoe u een lijst met geldige tijdzones retourneert in de Oracle-Database om een volledige lijst met geldige regienamen op uw systeem te krijgen.

u kunt ook een werkelijke Tijdzone offset gebruiken:

CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';

als u de tijdzone niet expliciet instelt bij het maken van de database, wordt de standaard de tijdzone van het besturingssysteem van de server ingesteld.

u kunt ook de huidige tijdzone-instelling voor de database wijzigen. Gebruik hiervoor het ALTER DATABASE statement.

voorbeeld:

ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';

merk op dat de tijdzone van de database alleen relevant is voor TIMESTAMP WITH LOCAL TIME ZONE kolommen. Oracle raadt u ook aan om de tijdzone van de database in te stellen op UTC (0:00) om gegevensconversie te voorkomen en de prestaties te verbeteren wanneer gegevens tussen databases worden overgedragen.

Stel de Sessietijdzone in

u kunt de sessietijdzone onafhankelijk van de tijdzone van de database instellen. Wanneer u TIMESTAMP WITH LOCAL TIME ZONE gegevens retourneert, wordt deze teruggegeven in de tijdzone van de huidige sessie.

de sessie tijdzone wordt ook van kracht wanneer een TIMESTAMP waarde wordt geconverteerd naar het TIMESTAMP WITH TIME ZONE of TIMESTAMP WITH LOCAL TIME ZONE gegevenstype.

u kunt een aantal dingen doen om de tijdzone op sessieniveau in te stellen.

de omgevingsvariabele Ora_sdtz

u kunt de sessie-tijdzone instellen met de omgevingsvariabele ORA_SDTZ. Dit kan worden ingesteld op de volgende waarden:

  • lokale tijdzone besturingssysteem ('OS_TZ')
  • Tijdzone Database ('DB_TZ')
  • Absolute offset van UTC (bijv.'-04:00')
  • naam Tijdzone regio (bijv. 'America/St_Kitts')

hier zijn enkele voorbeelden van het instellen van deze omgevingsvariabele in een UNIX-omgeving:

% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'

de standaardwaarde van de variabele ORA_SDTZ is 'OD_TZ'. Deze waarde wordt gebruikt wanneer de variabele niet is ingesteld of op een ongeldige waarde is ingesteld.

het ALTER SESSION Statement

u kunt de tijdzone voor een specifieke SQL-sessie wijzigen met de SET TIME_ZONE clausule van het ALTER SESSION statement.

TIME_ZONE kan op de volgende waarden worden ingesteld:

  • standaard lokale tijdzone wanneer de sessie werd gestart (local)
  • Tijdzone Database (dbtimezone)
  • Absolute offset van UTC (bijv. '-04:00')
  • naam Tijdzone regio (bijv. 'Canada/Eastern')

hier is een voorbeeld van het instellen van TIME_ZONE op dergelijke waarden:

ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';

u kunt de tijdzone van uw huidige sessie controleren met de functie SESSIONTIMEZONE.

voorbeeld:

SELECT SESSIONTIMEZONE FROM DUAL;

resultaat:

Australia/Brisbane 

in mijn geval, de sessie Tijdzone is ingesteld op Australië / Brisbane.

DE AT-Tijdzone-Clausule

een datetime-uitdrukking kan een AT LOCAL – clausule of een AT TIME ZONE – clausule bevatten. Als u een AT LOCAL – clausule toevoegt, wordt het resultaat in de huidige sessie-Tijdzone geretourneerd. Als u de AT TIME ZONE – clausule opneemt, kan de tijdzone een van de volgende zijn: :

  • a Tijdzone offset
  • a Tijdzone region name
  • DBTIMEZONE (deze functie retourneert de tijdzone van de database)
  • SESSIONTIMEZONE (deze functie geeft de tijdzone van de huidige sessie terug)
  • een expressie die een tekenreeks met een geldig tijdzoneformaat retourneert.

voorbeeld:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;

resultaat:

02/JAN/30 04:30:35.000000000 AM +12:00

In dit geval heb ik de functie FROM_TZ() gebruikt om een tijdstempelwaarde en een tijdzone om te zetten naar een waarde TIMESTAMP WITH TIME ZONE. Ik gebruikte toen de AT TIME ZONE clausule om een andere tijdzone op te geven.

hier is hetzelfde voorbeeld, behalve deze keer dat ik specificeer AT LOCAL:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;

resultaat:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

Leave a Reply

Het e-mailadres wordt niet gepubliceerd.