MariaDB zawiera wiele funkcji, które umożliwiają zwracanie wartości czasu i daty i godziny w różnych formatach.
Dwie funkcje pozwalają sformatować część czasu przy użyciu zegara 12-godzinnego, przy czym oznaczenie AM/PM to DATE_FORMAT() i TIME_FORMAT() .
Istnieje wiele specyfikatorów formatu, których można używać z tymi funkcjami, ale tylko kilka zwracających oznaczenie AM/PM.
%r Specyfikator formatu
%r Specyfikator formatu służy do formatowania godziny w formacie 12-godzinnym, po którym następuje oznaczenie AM/PM.
Przykład:
SELECT DATE_FORMAT('2030-03-10 18:10:37', '%r'); Wynik:
+------------------------------------------+
| DATE_FORMAT('2030-03-10 18:10:37', '%r') |
+------------------------------------------+
| 06:10:37 PM |
+------------------------------------------+
Wynikowy czas jest wyświetlany tak, jakby został sformatowany przy użyciu następującego ciągu formatującego:'%I:%i:%S %p' .
Oczywiście, czy zwraca AM lub PM zależy od faktycznego czasu. Czasy przed 12:00:00 zwróć AM i czasy po tym zwracają PM .
Oto, co się stanie, jeśli zmienimy czas na przed 12:00:00 :
SELECT DATE_FORMAT('2030-03-10 06:10:37', '%r'); Wynik:
+------------------------------------------+
| DATE_FORMAT('2030-03-10 06:10:37', '%r') |
+------------------------------------------+
| 06:10:37 AM |
+------------------------------------------+
Zarówno DATE_FORMAT() i TIME_FORMAT() zaakceptuj %r specyfikator formatu, więc możemy użyć tego samego specyfikatora formatu z TIME_FORMAT() funkcja:
SELECT TIME_FORMAT('06:10:37', '%r'); Wynik:
+-------------------------------+
| TIME_FORMAT('06:10:37', '%r') |
+-------------------------------+
| 06:10:37 AM |
+-------------------------------+
TIME_FORMAT() akceptuje wartości czasu oraz daty i godziny, natomiast DATE_FORMAT() akceptuje tylko wartości daty i godziny. Jednak TIME_FORMAT() akceptuje tylko specyfikatory formatu dla godzin, minut i sekund. Widząc jako %r zwraca godziny, minuty i sekundy, to też jest akceptowane.
%p Specyfikator formatu
%p Specyfikator formatu to bardziej szczegółowy specyfikator formatu, który jest używany wyłącznie do reprezentowania desygnatora AM/PM. Zwykle jest używany w połączeniu z innymi specyfikatorami formatu, aby zwrócić czas w formacie niestandardowym.
Jak wspomniano, %r specyfikator formatu formatuje czas tak, jakby był sformatowany przy użyciu następującego ciągu formatującego:'%I:%i:%S %p' .
Użyjmy tego ciągu wprost:
SELECT TIME_FORMAT('18:10:37', '%I:%i:%S %p'); Wynik:
+----------------------------------------+
| TIME_FORMAT('18:10:37', '%I:%i:%S %p') |
+----------------------------------------+
| 06:10:37 PM |
+----------------------------------------+
Otrzymujemy więc ten sam wynik, co przy użyciu %r specyfikator formatu.
Jednak jedną z zalet korzystania z tej metody jest to, że możemy skonstruować dane wyjściowe w nasz własny, niestandardowy sposób.
Na przykład:
SELECT TIME_FORMAT('18:10:37', '%l:%i %p'); Wynik:
+-------------------------------------+
| TIME_FORMAT('18:10:37', '%l:%i %p') |
+-------------------------------------+
| 6:10 PM |
+-------------------------------------+
Tutaj użyliśmy %l aby zwrócić część godzinową bez wiodącego zera. Pominęliśmy również część sekundową.
Zobacz ciągi formatujące MariaDB, aby uzyskać pełną listę specyfikatorów formatu, których można używać z tymi funkcjami.