W MariaDB, SYSDATE()
to wbudowana funkcja daty i czasu, która zwraca bieżącą datę i godzinę.
Zwraca czas wykonania funkcji (który może być inny niż czas wykonania instrukcji).
Zwracana wartość jest zwracana w formacie 'YYYY-MM-DD HH:MM:SS'
lub YYYYMMDDHHMMSS.uuuuuu
format, w zależności od tego, czy funkcja jest używana w kontekście łańcuchowym czy liczbowym.
Zwracana wartość jest wyrażona w bieżącej strefie czasowej.
Masz również możliwość określenia precyzji w mikrosekundach.
Składnia
Składnia wygląda tak:
SYSDATE([precision])
Gdzie precision
jest opcjonalnym argumentem, który określa precyzję w mikrosekundach.
Przykład
Oto przykład:
SELECT SYSDATE();
Wynik:
+---------------------+ | SYSDATE() | +---------------------+ | 2021-05-27 08:40:41 | +---------------------+
Kontekst numeryczny
Kiedy SYSDATE()
jest używany w kontekście numerycznym, wynik jest następujący:YYYYMMDDHHMMSS.uuuuuu
format.
Przykład:
SELECT
SYSDATE(),
SYSDATE() + 0;
Wynik:
+---------------------+----------------+ | SYSDATE() | SYSDATE() + 0 | +---------------------+----------------+ | 2021-05-27 08:41:19 | 20210527084119 | +---------------------+----------------+
Precyzja
Oto przykład określania dokładności w mikrosekundach:
SELECT
SYSDATE(6),
SYSDATE(6) + 0;
Wynik:
+----------------------------+-----------------------+ | SYSDATE(6) | SYSDATE(6) + 0 | +----------------------------+-----------------------+ | 2021-05-27 08:41:44.561665 | 20210527084144.562263 | +----------------------------+-----------------------+
Maksymalna wartość precyzji w mikrosekundach wynosi 6. Oto, co się dzieje, gdy dla precyzji zostanie przekazana wyższa liczba:
SELECT SYSDATE(12);
Wynik:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6
SYSDATE()
vs NOW()
Chociaż SYSDATE()
jest podobny do NOW()
funkcja, istnieją różnice.
Jedną z głównych różnic jest to, że SYSDATE()
zwraca czas wykonania, podczas gdy NOW()
zwraca czas rozpoczęcia wykonywania instrukcji. Po uruchomieniu w ramach procedury składowanej lub wyzwalacza NOW()
zwróci czas rozpoczęcia wykonywania procedury składowanej lub wyzwalacza.
Oto przykład, który pokazuje tę różnicę:
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Wynik (przy użyciu wyjścia pionowego):
NOW(): 2021-05-27 08:47:06 SYSDATE(): 2021-05-27 08:47:06 SLEEP(5): 0 NOW(): 2021-05-27 08:47:06 SYSDATE(): 2021-05-27 08:47:11
W tym przypadku użyliśmy funkcji SLEEP()
funkcja wstrzymania przetwarzania na pięć sekund przed drugą partią wywołań funkcji.
Widzimy, że za drugim razem SYSDATE()
został wywołany, jego wartość zwracana była inna niż za pierwszym razem. NOW()
z drugiej strony zwrócił tę samą wartość za każdym razem.
Jest kilka innych rzeczy, o których należy pamiętać podczas korzystania z SYSDATE()
. Na przykład SET TIMESTAMP
nie ma na to wpływu (podczas gdy ma) wpływają na NOW()
funkcjonować). Również SYSDATE()
jest niebezpieczne dla replikacji, jeśli używane jest rejestrowanie binarne oparte na instrukcjach. Istnieją jednak sposoby radzenia sobie z tym, jeśli jest to wymagane. Więcej informacji można znaleźć w dokumentacji MariaDB.