Oracle
 sql >> Baza danych >  >> RDS >> Oracle

FROM_TZ() Funkcja w Oracle

W bazie danych Oracle FROM_TZ() funkcja konwertuje wartość znacznika czasu i strefę czasową na TIMESTAMP WITH TIME ZONE wartość.

Wartość sygnatury czasowej i strefę czasową przekazujesz jako dwa oddzielne argumenty, a funkcja zwraca je jako TIMESTAMP WITH TIME ZONE wartość.

Składnia

Składnia wygląda tak:

FROM_TZ(timestamp_value, time_zone_value)

Gdzie timestamp_value to znacznik czasu, a time_zone_value to ciąg znaków w formacie 'TZH:TZM' lub wyrażenie znakowe, które zwraca ciąg w TZR z opcjonalnym TZD format.

Przykład

Oto przykład:

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

Wynik:

01/JAN/30 12:30:35.000000000 PM -04:00

Określanie regionu strefy czasowej

Oto przykład, który używa regionu strefy czasowej zamiast przesunięcia strefy czasowej:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;

Wynik:

01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS

Zmień strefę czasową

Możesz użyć AT LOCAL lub AT TIME ZONE klauzula, aby zmienić wynikowy znacznik czasu na inną strefę czasową.

Przykład:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
    AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;

Wynik:

01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK

A tutaj używa AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
    AT LOCAL
FROM DUAL;

Wynik:

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

Możesz użyć SESSIONTIMEZONE funkcja sprawdzająca strefę czasową bieżącej sesji i DBTIMEZONE aby sprawdzić strefę czasową bazy danych.

Nieprawidłowe strefy czasowe

Przekazanie nieprawidłowej strefy czasowej skutkuje błędem:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL
Error report -
ORA-01882: timezone region not found

Listę prawidłowych regionów stref czasowych można uzyskać, wysyłając zapytanie do V$TIMEZONE_NAMES widok.

Oto, co się dzieje, gdy podamy przesunięcie strefy czasowej poza akceptowanym zakresem:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL
Error report -
ORA-01874: time zone hour must be between -15 and 15

Argumenty zerowe

Przekazywanie null dla pierwszego argumentu powoduje błąd:

SET NULL 'null';
SELECT 
    FROM_TZ(null, '+10:00')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT 
    FROM_TZ(null, '+10:00')
FROM DUAL
Error at Command Line : 2 Column : 13
Error report -
SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

Przekazywanie null dla drugiego argumentu zwraca null :

SET NULL 'null';
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;

Wynik:

null

Zauważ, że domyślnie SQLcl i SQL*Plus zwracają spację, gdy null występuje w wyniku polecenia SQL SELECT oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. W powyższym przykładzie określiłem, że ciąg null należy zwrócić.

Nieprawidłowa liczba argumentów

Przekazanie nieprawidłowej liczby argumentów skutkuje błędem:

SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zip przy użyciu procedury składowanej Oracle

  2. Jak używać typu tabeli w instrukcji SELECT FROM?

  3. Jak mogę sprawdzić, czy mój system Oracle obsługuje znaki Unicode lub znaki wielobajtowe?

  4. Błąd podczas drukowania zmiennej REFCURSOR jako parametru OUT w procedurze w Oracle 11g

  5. przekaż tablicę liczb całkowitych do procedury Oracle przez c#