In MariaDB, TO_SECONDS()
è una funzione di data e ora incorporata che restituisce il numero di secondi dall'anno 0 all'espressione data o data e ora specificata.
Sintassi
La sintassi è questa:
TO_SECONDS(expr)
Dove expr
è un valore di data o data e ora.
Esempio
Ecco un esempio:
SELECT TO_SECONDS('2020-10-30');
Risultato:
+--------------------------+ | TO_SECONDS('2020-10-30') | +--------------------------+ | 63771235200 | +--------------------------+
Eccolo con un paio di altri valori temporali:
SELECT
TO_SECONDS('0000-01-01'),
TO_SECONDS('1234-10-30');
Risultato:
+--------------------------+--------------------------+ | TO_SECONDS('0000-01-01') | TO_SECONDS('1234-10-30') | +--------------------------+--------------------------+ | 86400 | 38967436800 | +--------------------------+--------------------------+
Valori di data e ora
Ecco un esempio che utilizza un valore datetime:
SELECT TO_SECONDS('2020-10-30 10:23:47');
Risultato:
+-----------------------------------+ | TO_SECONDS('2020-10-30 10:23:47') | +-----------------------------------+ | 63771272627 | +-----------------------------------+
Microsecondi
TO_SECONDS()
ignora i microsecondi:
SELECT TO_SECONDS('2020-10-30 10:23:47.999999');
Risultato:
+------------------------------------------+ | TO_SECONDS('2020-10-30 10:23:47.999999') | +------------------------------------------+ | 63771272627 | +------------------------------------------+
Date numeriche
Sono supportate le date numeriche:
SELECT TO_SECONDS(20201030);
Risultato:
+----------------------+ | TO_SECONDS(20201030) | +----------------------+ | 63771235200 | +----------------------+
Data/ora corrente
Ecco un esempio che utilizza NOW()
per restituire il numero di secondi in base alla data e all'ora correnti:
SELECT
NOW(),
TO_SECONDS(NOW());
Risultato:
+---------------------+-------------------+ | NOW() | TO_SECONDS(NOW()) | +---------------------+-------------------+ | 2021-05-31 09:34:16 | 63789672856 | +---------------------+-------------------+
Tuttavia, se utilizziamo CURDATE()
, otterremo un risultato diverso (perché CURDATE()
restituisce un valore di data, mentre NOW()
restituisce un valore datetime).
SELECT
NOW(),
TO_SECONDS(NOW()),
CURDATE(),
TO_SECONDS(CURDATE());
Risultato (usando l'output verticale):
NOW(): 2021-05-31 09:35:01 TO_SECONDS(NOW()): 63789672901 CURDATE(): 2021-05-31 TO_SECONDS(CURDATE()): 63789638400
Argomento non valido
Quando vengono passati argomenti non validi, TO_SECONDS()
restituisce null
con un avviso:
SELECT TO_SECONDS('Homer');
Risultato:
+---------------------+ | TO_SECONDS('Homer') | +---------------------+ | NULL | +---------------------+ 1 row in set, 1 warning (0.000 sec)
Controlla l'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1292 | Incorrect time value: 'Homer' | +---------+------+-------------------------------+
Argomento mancante
Chiamando TO_SECONDS()
con il numero errato di argomenti, o senza passare alcun argomento, genera un errore:
SELECT TO_SECONDS();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'
E un altro esempio:
SELECT TO_SECONDS('2020-10-08', '10:09:10');
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'