MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona TO_SECONDS() in MariaDB

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'