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'