MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como SYSDATE() funciona no MariaDB


No MariaDB, SYSDATE() é uma função de data e hora integrada que retorna a data e a hora atuais.

Ele retorna a hora em que a função foi executada (que pode ser diferente da hora em que a instrução foi executada).

O valor de retorno é retornado em 'YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMSS.uuuuuu formato, dependendo se a função é usada em uma string ou contexto numérico.

O valor de retorno é expresso no fuso horário atual.

Você também tem a opção de especificar a precisão de microssegundos.

Sintaxe


A sintaxe fica assim:
SYSDATE([precision])

Onde precision é um argumento opcional que especifica a precisão de microssegundos.

Exemplo


Aqui está um exemplo:
SELECT SYSDATE();

Resultado:
+---------------------+
| SYSDATE()           |
+---------------------+
| 2021-05-27 08:40:41 |
+---------------------+

Contexto Numérico


Quando SYSDATE() é usado em um contexto numérico, o resultado está em YYYYMMDDHHMMSS.uuuuuu formato.

Exemplo:
SELECT
    SYSDATE(),
    SYSDATE() + 0;

Resultado:
+---------------------+----------------+
| SYSDATE()           | SYSDATE() + 0  |
+---------------------+----------------+
| 2021-05-27 08:41:19 | 20210527084119 |
+---------------------+----------------+

Precisão


Aqui está um exemplo de especificação de precisão de microssegundos:
SELECT
    SYSDATE(6),
    SYSDATE(6) + 0;

Resultado:
+----------------------------+-----------------------+
| SYSDATE(6)                 | SYSDATE(6) + 0        |
+----------------------------+-----------------------+
| 2021-05-27 08:41:44.561665 | 20210527084144.562263 |
+----------------------------+-----------------------+

O valor máximo para a precisão de microssegundos é 6. Veja o que acontece quando um número mais alto é passado para a precisão:
SELECT SYSDATE(12);

Resultado:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6

SYSDATE() vs NOW()


Embora SYSDATE() é semelhante ao NOW() função, existem diferenças.

Uma das principais diferenças é que SYSDATE() retorna o tempo de execução, enquanto NOW() retorna a hora em que a instrução começou a ser executada. Quando executado em um procedimento armazenado ou gatilho, NOW() retornará a hora em que o procedimento armazenado ou gatilho começou a ser executado.

Aqui está um exemplo que demonstra essa diferença:
SELECT 
    NOW(),
    SYSDATE(),
    SLEEP(5),
    NOW(),
    SYSDATE();

Resultado (usando saída vertical):
    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:06
 SLEEP(5): 0
    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:11

Neste caso usamos o SLEEP() função para pausar o processamento por cinco segundos antes do segundo lote de chamadas de função.

Podemos ver que na segunda vez SYSDATE() foi invocado, seu valor de retorno foi diferente da primeira vez. NOW() por outro lado, retornou o mesmo valor nas duas vezes.

Há algumas outras coisas a serem observadas ao usar SYSDATE() . Por exemplo, SET TIMESTAMP não o afeta (enquanto afeta afetar o NOW() função). Além disso, SYSDATE() não é seguro para replicação se o log binário baseado em instrução for usado. No entanto, existem maneiras de lidar com isso, se necessário. Consulte a documentação do MariaDB para obter mais informações.