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'