No MariaDB,
TO_SECONDS() é uma função de data e hora integrada que retorna o número de segundos do ano 0 até a data ou expressão de data e hora especificada. Sintaxe
A sintaxe fica assim:
TO_SECONDS(expr) Onde
expr é um valor de data ou data/hora. Exemplo
Aqui está um exemplo:
SELECT TO_SECONDS('2020-10-30'); Resultado:
+--------------------------+
| TO_SECONDS('2020-10-30') |
+--------------------------+
| 63771235200 |
+--------------------------+ Aqui está com alguns outros valores de tempo:
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 data e hora
Aqui está um exemplo que usa um valor de data e hora:
SELECT TO_SECONDS('2020-10-30 10:23:47'); Resultado:
+-----------------------------------+
| TO_SECONDS('2020-10-30 10:23:47') |
+-----------------------------------+
| 63771272627 |
+-----------------------------------+ Microsegundos
TO_SECONDS() ignora microssegundos:SELECT TO_SECONDS('2020-10-30 10:23:47.999999'); Resultado:
+------------------------------------------+
| TO_SECONDS('2020-10-30 10:23:47.999999') |
+------------------------------------------+
| 63771272627 |
+------------------------------------------+ Datas numéricas
Datas numéricas são suportadas:
SELECT TO_SECONDS(20201030); Resultado:
+----------------------+ | TO_SECONDS(20201030) | +----------------------+ | 63771235200 | +----------------------+
Data/hora atual
Aqui está um exemplo que usa
NOW() para retornar o número de segundos com base na data e hora atuais:SELECT
NOW(),
TO_SECONDS(NOW()); Resultado:
+---------------------+-------------------+ | NOW() | TO_SECONDS(NOW()) | +---------------------+-------------------+ | 2021-05-31 09:34:16 | 63789672856 | +---------------------+-------------------+
No entanto, se usarmos
CURDATE() , obteremos um resultado diferente (porque CURDATE() retorna um valor de data, enquanto NOW() retorna um valor de data e hora). SELECT
NOW(),
TO_SECONDS(NOW()),
CURDATE(),
TO_SECONDS(CURDATE()); Resultado (usando saída vertical):
NOW(): 2021-05-31 09:35:01
TO_SECONDS(NOW()): 63789672901
CURDATE(): 2021-05-31
TO_SECONDS(CURDATE()): 63789638400 Argumento inválido
Ao passar qualquer argumento inválido,
TO_SECONDS() retorna null com um aviso:SELECT TO_SECONDS('Homer'); Resultado:
+---------------------+
| TO_SECONDS('Homer') |
+---------------------+
| NULL |
+---------------------+
1 row in set, 1 warning (0.000 sec) Confira o aviso:
SHOW WARNINGS; Resultado:
+---------+------+-------------------------------+ | Level | Code | Message | +---------+------+-------------------------------+ | Warning | 1292 | Incorrect time value: 'Homer' | +---------+------+-------------------------------+
Argumento ausente
Chamando
TO_SECONDS() com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:SELECT TO_SECONDS(); Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'
E outro exemplo:
SELECT TO_SECONDS('2020-10-08', '10:09:10'); Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'TO_SECONDS'