W MariaDB CONVERT_TZ()
to wbudowana funkcja daty i godziny, która konwertuje wartość daty i godziny z jednej strefy czasowej na inną.
Gdy wywołujesz funkcję, przekazujesz trzy argumenty:czas, strefę czasową, z której ma zostać przekonwertowana z i strefę czasową do przekonwertowania na .
Składnia
Składnia wygląda tak:
CONVERT_TZ(dt,from_tz,to_tz)
Gdzie dt
to wyrażenie daty i godziny, from_tz
to strefa czasowa do konwersji z i to_tz
to strefa czasowa, w której należy przekonwertować na .
Przykład
Oto przykład:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Wynik:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Tutaj oryginalna strefa czasowa to +00:00 i przekonwertowaliśmy ją na +10:00.
Oto, co się stanie, jeśli użyjemy innej początkowej strefy czasowej:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Wynik:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Nazwane strefy czasowe
Można użyć nazwanych stref czasowych, ale wymaga to załadowania różnych tabel stref czasowych.
Oto, co się dzieje, gdy tabele stref czasowych nie zaludnione:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Wynik:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
Wynik to null
, ponieważ w tabelach stref czasowych nie ma danych o strefie czasowej.
Oto znowu to samo zapytanie, ale tym razem z danymi w tabelach stref czasowych:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Wynik:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Wartości daty i godziny poza zakresem
Konwersja nie nastąpi, jeśli wartość wykracza poza obsługiwany TIMESTAMP
zakres ('1970-01-01 00:00:01'
do '2038-01-19 05:14:07'
UTC) po konwersji z from_tz
do UTC.
Przykład:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Wynik:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Nieprawidłowe argumenty
Jeśli którykolwiek z argumentów jest nieprawidłowy, CONVERT_TZ()
zwraca null
.
Przykład:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Wynik:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
W tym przypadku próbowałem przekonwertować wyrażenie daty i godziny na nieprawidłową strefę czasową (+90:00
), a więc null
został zwrócony.
Argumenty zerowe
Jeśli jakikolwiek argument ma wartość null
, wynik to null
:
SELECT
CONVERT_TZ(null, '+00:00', '+90:00') AS "1",
CONVERT_TZ('2021-05-10 01:00:00', null, '+90:00') AS "2",
CONVERT_TZ('2021-05-10 01:00:00', '+00:00', null) AS "3";
Wynik:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Brakujący argument
Wywołanie CONVERT_TZ()
z niewłaściwą liczbą argumentów lub bez przekazania jakichkolwiek argumentów powoduje błąd:
SELECT CONVERT_TZ();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'