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.