MariaDB ma kilka funkcji, które umożliwiają wyodrębnianie różnych części daty i godziny z wartości daty/czasu. Możesz ich użyć do oddzielenia każdego składnika daty/czasu do własnej kolumny, jeśli jest to wymagane.
Poniżej znajdują się cztery sposoby wyodrębniania godzin, minut i sekund z wartości czasu w MariaDB. Jako bonus uwzględnimy również mikrosekundy.
HOUR()
, MINUTE()
, SECOND()
i MICROSECOND()
Funkcje
HOUR()
, MINUTE()
i SECOND()
Funkcje wyodrębniają godziny, minuty i sekundy odpowiednio z wartości daty lub daty i godziny.
A jeśli pracujesz z większą precyzją, możesz użyć MICROSECOND()
funkcja, aby zwrócić część mikrosekund.
Oto przykład użycia tych funkcji do zwrócenia każdego komponentu czasu w jego własnej kolumnie:
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
wartości mogą należeć do zakresu '-838:59:59.999999'
do '838:59:59.999999'
.
TIME
wartości mogą być również ujemne. W takich przypadkach zwracane wartości są nadal dodatnie.
Oto ujemna wartość czasu:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
EXTRACT()
Funkcja
EXTRACT()
funkcja pozwala na wyodrębnienie określonej jednostki z wartości daty/czasu. Dlatego możesz go użyć do wyodrębnienia godzin, minut, sekund i mikrosekund z wartości czasu.
Przykład:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME_FORMAT()
Funkcja
TIME_FORMAT()
funkcja pozwala sformatować wartość czasu na podstawie ciągu formatującego. Ciąg formatu określa sposób formatowania czasu.
Możesz zatem użyć tej funkcji, aby oddzielnie zwrócić różne części czasu.
Przykład:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Możliwe jest również zwrócenie wszystkich składników czasu osobno, ale w tej samej kolumnie.
Oto przykład tego, co mam na myśli:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Wynik:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
TIME_FORMAT()
funkcja akceptuje podzbiór ciągów formatujących, które mogą być używane z DATE_FORMAT()
funkcjonować.
Istnieje kilka możliwych specyfikatorów formatu dla części godzinowej. Użyty powyżej specyfikator formatu zwraca godzinę z dwiema cyframi między 00
i 23
. Zobacz ciągi formatujące MariaDB, aby uzyskać pełną listę ciągów formatujących/specyfikatorów, których można używać z DATE_FORMAT()
. TIME_FORMAT()
funkcja akceptuje tylko specyfikatory formatu dla godzin, minut i sekund/subsekund. Każdy inny specyfikator formatu daje wynik null
lub 0
zostanie zwrócony.
DATE_FORMAT()
Funkcja
DATE_FORMAT()
Funkcja umożliwia sformatowanie wartości daty lub daty i godziny na podstawie ciągu formatującego. Ciąg formatu określa sposób formatowania daty/godziny.
Dlatego możemy użyć tych samych specyfikatorów formatu, których użyliśmy w funkcji TIME_FORMAT()
funkcji w poprzednim przykładzie. Jednak DATE_FORMAT()
nie akceptuje TIME
wartość, więc będziemy musieli przekazać DATETIME
wartość.
SELECT
DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Mija tylko TIME
wartość nie działa z tą funkcją:
SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Wynik:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Zobaczmy ostrzeżenie:
SHOW WARNINGS;
Wynik:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+