sql >> Database >  >> RDS >> Oracle

4 manieren om de tijdzone in Oracle te wijzigen

In Oracle Database kunnen op verschillende plaatsen tijdzones worden ingesteld. Hieronder vindt u vier manieren om de tijdzone te wijzigen wanneer u Oracle gebruikt.

Stel de databasetijdzone in

U kunt de tijdzone van de database instellen bij het maken van de database. Gebruik hiervoor de SET TIME_ZONE clausule van de CREATE DATABASE verklaring.

Voorbeeld:

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

In dit geval heb ik de naam van een tijdzoneregio gebruikt. Zie Een lijst met geldige tijdzones retourneren in Oracle Database om een ​​volledige lijst met geldige regionamen op uw systeem te krijgen.

Als alternatief kunt u een werkelijke tijdzoneverschuiving gebruiken:

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

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

U kunt ook de huidige tijdzone-instelling voor de database wijzigen. Gebruik hiervoor de ALTER DATABASE verklaring.

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 de databasetijdzone 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 databasetijdzone instellen. Wanneer u TIMESTAMP WITH LOCAL TIME ZONE . teruggeeft gegevens, wordt deze geretourneerd in de tijdzone van de huidige sessie.

De sessietijdzone wordt ook van kracht wanneer een TIMESTAMP waarde wordt geconverteerd naar de 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.

Thij ORA_SDTZ Omgevingsvariabele

U kunt de sessietijdzone instellen met de ORA_SDTZ omgevingsvariabele. Dit kan worden ingesteld op de volgende waarden:

  • Lokale tijdzone van het besturingssysteem ('OS_TZ' )
  • Database tijdzone ('DB_TZ' )
  • Absolute afwijking van UTC (bijv.'-04:00' )
  • Naam van tijdzoneregio (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 ORA_SDTZ variabele is 'OD_TZ' . Deze waarde wordt gebruikt wanneer de variabele niet is ingesteld of is ingesteld op een ongeldige waarde.

De ALTER SESSION Verklaring

U kunt de tijdzone voor een specifieke SQL-sessie wijzigen met de SET TIME_ZONE clausule van de ALTER SESSION verklaring.

TIME_ZONE kan worden ingesteld op de volgende waarden:

  • Standaard lokale tijdzone toen de sessie werd gestart (local )
  • Database tijdzone (dbtimezone )
  • Absolute afwijking van UTC (bijv. '-04:00' )
  • Naam van tijdzoneregio (bijv. 'Canada/Eastern' )

Hier is een voorbeeld van het instellen van TIME_ZONE naar 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 SESSIONTIMEZONE functie.

Voorbeeld:

SELECT SESSIONTIMEZONE FROM DUAL;

Resultaat:

Australia/Brisbane 

In mijn geval is de tijdzone van de sessie ingesteld op Australië/Brisbane.

De AT TIME ZONE Clausule

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

  • Een tijdzoneverschuiving
  • De naam van een tijdzoneregio
  • DBTIMEZONE (deze functie geeft de tijdzone van de database terug)
  • SESSIONTIMEZONE (deze functie geeft de tijdzone van de huidige sessie terug)
  • Een expressie die een tekenreeks retourneert met een geldige tijdzonenotatie.

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 gebruikte ik de FROM_TZ() functie om een ​​tijdstempelwaarde en een tijdzone om te zetten in een TIMESTAMP WITH TIME ZONE waarde. Ik gebruikte toen de AT TIME ZONE clausule om een ​​andere tijdzone op te geven.

Hier is hetzelfde voorbeeld, maar deze keer specificeer ik AT LOCAL :

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

Resultaat:

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

  1. Een tijdzone-offset toevoegen aan een datetime2-waarde in SQL Server (T-SQL)

  2. Hoe kan ik meerdere kolommen SELECTEREN binnen een CASE WHEN op SQL Server?

  3. Django JSONVeldfiltering

  4. voorwaardelijke unieke beperking