sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona TO_SECONDS() en MariaDB

En MariaDB, TO_SECONDS() es una función de fecha y hora incorporada que devuelve el número de segundos desde el año 0 hasta la fecha o expresión de fecha y hora dada.

Sintaxis

La sintaxis es así:

TO_SECONDS(expr)

Donde expr es un valor de fecha o fechahora.

Ejemplo

He aquí un ejemplo:

SELECT TO_SECONDS('2020-10-30');

Resultado:

+--------------------------+
| TO_SECONDS('2020-10-30') |
+--------------------------+
|              63771235200 |
+--------------------------+

Aquí está con un par de otros valores de tiempo:

SELECT 
    TO_SECONDS('0000-01-01'),
    TO_SECONDS('1234-10-30');

Resultado:

+--------------------------+--------------------------+
| TO_SECONDS('0000-01-01') | TO_SECONDS('1234-10-30') |
+--------------------------+--------------------------+
|                    86400 |              38967436800 |
+--------------------------+--------------------------+

Valores de fecha y hora

Aquí hay un ejemplo que usa un valor de fecha y hora:

SELECT TO_SECONDS('2020-10-30 10:23:47');

Resultado:

+-----------------------------------+
| TO_SECONDS('2020-10-30 10:23:47') |
+-----------------------------------+
|                       63771272627 |
+-----------------------------------+

Microsegundos

TO_SECONDS() ignora los microsegundos:

SELECT TO_SECONDS('2020-10-30 10:23:47.999999');

Resultado:

+------------------------------------------+
| TO_SECONDS('2020-10-30 10:23:47.999999') |
+------------------------------------------+
|                              63771272627 |
+------------------------------------------+

Fechas numéricas

Se admiten fechas numéricas:

SELECT TO_SECONDS(20201030);

Resultado:

+----------------------+
| TO_SECONDS(20201030) |
+----------------------+
|          63771235200 |
+----------------------+

Fecha/hora actual

Aquí hay un ejemplo que usa NOW() para devolver la cantidad de segundos según la fecha y hora actuales:

SELECT 
    NOW(),
    TO_SECONDS(NOW());

Resultado:

+---------------------+-------------------+
| NOW()               | TO_SECONDS(NOW()) |
+---------------------+-------------------+
| 2021-05-31 09:34:16 |       63789672856 |
+---------------------+-------------------+

Sin embargo, si usamos CURDATE() , obtendremos un resultado diferente (porque CURDATE() devuelve un valor de fecha, mientras que NOW() devuelve un valor de fecha y hora).

SELECT 
    NOW(),
    TO_SECONDS(NOW()),
    CURDATE(),
    TO_SECONDS(CURDATE());

Resultado (usando salida vertical):

                NOW(): 2021-05-31 09:35:01
    TO_SECONDS(NOW()): 63789672901
            CURDATE(): 2021-05-31
TO_SECONDS(CURDATE()): 63789638400

Argumento no válido

Cuando se pasan argumentos no válidos, TO_SECONDS() devuelve null con una advertencia:

SELECT TO_SECONDS('Homer');

Resultado:

+---------------------+
| TO_SECONDS('Homer') |
+---------------------+
|                NULL |
+---------------------+
1 row in set, 1 warning (0.000 sec)

Compruebe la advertencia:

SHOW WARNINGS;

Resultado:

+---------+------+-------------------------------+
| Level   | Code | Message                       |
+---------+------+-------------------------------+
| Warning | 1292 | Incorrect time value: 'Homer' |
+---------+------+-------------------------------+

Argumento faltante

Llamando a TO_SECONDS() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:

SELECT TO_SECONDS();

Resultado:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'

Y otro ejemplo:

SELECT TO_SECONDS('2020-10-08', '10:09:10');

Resultado:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'