W MariaDB, TO_SECONDS()
jest wbudowaną funkcją daty i czasu, która zwraca liczbę sekund od roku 0 do podanego wyrażenia daty lub czasu.
Składnia
Składnia wygląda tak:
TO_SECONDS(expr)
Gdzie expr
jest wartością daty lub czasu.
Przykład
Oto przykład:
SELECT TO_SECONDS('2020-10-30');
Wynik:
+--------------------------+ | TO_SECONDS('2020-10-30') | +--------------------------+ | 63771235200 | +--------------------------+
Oto kilka innych wartości czasu:
SELECT
TO_SECONDS('0000-01-01'),
TO_SECONDS('1234-10-30');
Wynik:
+--------------------------+--------------------------+ | TO_SECONDS('0000-01-01') | TO_SECONDS('1234-10-30') | +--------------------------+--------------------------+ | 86400 | 38967436800 | +--------------------------+--------------------------+
Wartości daty i godziny
Oto przykład, który używa wartości daty i godziny:
SELECT TO_SECONDS('2020-10-30 10:23:47');
Wynik:
+-----------------------------------+ | TO_SECONDS('2020-10-30 10:23:47') | +-----------------------------------+ | 63771272627 | +-----------------------------------+
Mikrosekundy
TO_SECONDS()
ignoruje mikrosekundy:
SELECT TO_SECONDS('2020-10-30 10:23:47.999999');
Wynik:
+------------------------------------------+ | TO_SECONDS('2020-10-30 10:23:47.999999') | +------------------------------------------+ | 63771272627 | +------------------------------------------+
Daty numeryczne
Obsługiwane są daty numeryczne:
SELECT TO_SECONDS(20201030);
Wynik:
+----------------------+ | TO_SECONDS(20201030) | +----------------------+ | 63771235200 | +----------------------+
Aktualna data/godzina
Oto przykład, który używa NOW()
aby zwrócić liczbę sekund w oparciu o bieżącą datę i godzinę:
SELECT
NOW(),
TO_SECONDS(NOW());
Wynik:
+---------------------+-------------------+ | NOW() | TO_SECONDS(NOW()) | +---------------------+-------------------+ | 2021-05-31 09:34:16 | 63789672856 | +---------------------+-------------------+
Jeśli jednak użyjemy CURDATE()
, otrzymamy inny wynik (ponieważ CURDATE()
zwraca wartość daty, natomiast NOW()
zwraca wartość daty/godziny).
SELECT
NOW(),
TO_SECONDS(NOW()),
CURDATE(),
TO_SECONDS(CURDATE());
Wynik (przy użyciu wyjścia pionowego):
NOW(): 2021-05-31 09:35:01 TO_SECONDS(NOW()): 63789672901 CURDATE(): 2021-05-31 TO_SECONDS(CURDATE()): 63789638400
Nieprawidłowy argument
Po przekazaniu jakichkolwiek nieprawidłowych argumentów, TO_SECONDS()
zwraca null
z ostrzeżeniem:
SELECT TO_SECONDS('Homer');
Wynik:
+---------------------+ | TO_SECONDS('Homer') | +---------------------+ | NULL | +---------------------+ 1 row in set, 1 warning (0.000 sec)
Sprawdź ostrzeżenie:
SHOW WARNINGS;
Wynik:
+---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1292 | Incorrect time value: 'Homer' | +---------+------+-------------------------------+
Brakujący argument
Wywołanie TO_SECONDS()
z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT TO_SECONDS();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'
I kolejny przykład:
SELECT TO_SECONDS('2020-10-08', '10:09:10');
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'