OceanBase Versão V4.2
Consultei a documentação oficial do OceanBase . A precisão da função CURRENT_TIMESTAMP() é de 9 dígitos, o que é suficiente para obter o tempo em nanossegundos. No entanto, no meu ambiente, a precisão é de apenas 6 dígitos, e os últimos 3 dígitos são preenchidos com zeros.
SELECT
TO_TIMESTAMP(‘2003-10-24 10:48:45.656123456’,‘YYYY-MM-DD HH24:MI:SS:FF9’) TO_TS9,
TO_CHAR(TO_TIMESTAMP(‘2003-10-24 10:48:45.656123456’,‘YYYY-MM-DD HH24:MI:SSXFF’),‘YYYY-MM-DD HH24:MI:SS:FF9’) TO_CS9,
TO_CHAR(SYSTIMESTAMP, ‘YYYY-MM-DD HH24:MI:SS.FF9’) AS TO_CS92,
CURRENT_TIMESTAMP(9) TIMESTAMP9
FROM DUAL;
*************************** 1. row ***************************
TO_TS9: 2003-10-24 10:48:45.656123456
TO_CS9: 2003-10-24 10:48:45:656123456
TO_CS92: 2025-03-14 10:24:38.757049000
TIMESTAMP9: 14-MAR-25 10.24.38.757054000 AM +08:00
A partir da saída do SQL acima, é possível exibir dados de nanossegundos de 9 dígitos. Como posso obter o tempo em nanossegundos no banco de dados?
Quero obter a hora com precisão de 9 dígitos, ou seja, em nanossegundos, mas só consigo obter a hora em microssegundos com precisão de 6 dígitos, e os últimos 3 dígitos são preenchidos com zeros. Como posso obter a hora em nanossegundos no banco de dados?
No modo MySQL do OceanBase, as funções NOW() e CURRENT_TIMESTAMP retornam o tempo com precisão de microssegundos (até 6 casas decimais).
Se sua instância do OceanBase estiver sendo executada no modo Oracle, funções como SYSTIMESTAMP e CURRENT_TIMESTAMP poderão retornar o tempo com precisão de nanossegundos (até 9 casas decimais).
Se precisar de registros de data e hora em nível de nanossegundos no modo MySQL, você poderá gerá-los usando aplicativos externos — por exemplo, com System.nanoTime() em Java ou time.Now().UnixNano() em Go — e armazená-los no banco de dados como BIGINT ou uma string com formato personalizado.