No MySQL, o
TO_SECONDS()
A função retorna o número de segundos desde o ano 0. Esta função não deve ser confundida com o
TIME_TO_SECONDS()
função, que retorna o número de segundos em um determinado valor de tempo fornecido como argumento.Sintaxe
A sintaxe fica assim:
TO_SECONDS(expr)
Onde
expr
é um valor de data ou data/hora (a ser comparado ao ano 0). Exemplo 1 - Usando um argumento 'data'
Aqui está um exemplo usando um argumento de data.
SELECT TO_SECONDS('2021-09-21');
Resultado:
+--------------------------+ | TO_SECONDS('2021-09-21') | +--------------------------+ | 63799401600 | +--------------------------+
Exemplo 2 – Usando um argumento 'datetime'
Aqui está um exemplo usando um argumento datetime.
SELECT TO_SECONDS('2021-09-21 10:30:25');
Resultado:
+-----------------------------------+ | TO_SECONDS('2021-09-21 10:30:25') | +-----------------------------------+ | 63799439425 | +-----------------------------------+
Exemplo 3 – Usando a data atual
Neste exemplo, passo o
CURDATE()
função como o argumento para usar a data atual. SELECT TO_SECONDS(CURDATE()) AS 'Result';
Resultado:
+-------------+ | Result | +-------------+ | 63697968000 | +-------------+
Exemplo 4 – Usando a data e hora atuais
Neste exemplo, passo o
NOW()
função como o argumento para usar a data e hora atuais. SELECT TO_SECONDS(NOW()) AS 'Result';
Resultado:
+-------------+ | Result | +-------------+ | 63698002698 | +-------------+
Anos de dois dígitos
O MySQL tem regras especiais para lidar com datas com anos de dois dígitos. Anos de dois dígitos são ambíguos porque o século é desconhecido. Basicamente, as seguintes regras se aplicam:
- Valores do ano no intervalo
00-69
são convertidos para2000-2069
. - Valores de ano no intervalo
70-99
são convertidos para1970-1999
.
Para uma explicação completa, veja a documentação do MySQL sobre como o MySQL lida com anos de dois dígitos.
Segue um exemplo para demonstrar:
SELECT TO_SECONDS('69-10-07') AS '69 (2069)', TO_SECONDS('70-10-07') AS '70 (1970)';
Resultado:
+-------------+-------------+ | 69 (2069) | 70 (1970) | +-------------+-------------+ | 65315548800 | 62191324800 | +-------------+-------------+
Datas abreviadas
Você também pode usar datas abreviadas. Aqui está um exemplo usando os valores de data anteriores de forma abreviada.
SELECT TO_SECONDS('691007') AS '69 (2069)', TO_SECONDS('701007') AS '70 (1970)';
Resultado:
+-------------+-------------+ | 69 (2069) | 70 (1970) | +-------------+-------------+ | 65315548800 | 62191324800 | +-------------+-------------+
Datas anteriores
A documentação do MySQL avisa que o
TO_SECONDS()
função:
não se destina ao uso com valores anteriores ao advento do calendário gregoriano (1582), pois não leva em consideração os dias perdidos quando o calendário foi alterado. Para datas anteriores a 1582 (e possivelmente um ano posterior em outras localidades), os resultados dessa função não são confiáveis.