Улей запрос, чтобы найти разницу между двумя отметками времени - PullRequest
0 голосов
/ 20 марта 2020

У меня есть две отметки времени запроса и ответа. Мне нужно выяснить разницу между двумя этими двумя временными метками в миллисекундах, как показано ниже.

Request: 2020-03-20 10:00:00:010
Response: 2020-03-20 10:00:00:020
Diff: 10 millisecond

Я пытался, но не смог получить требуемый ответ. Я попытался, как показано ниже, но он дает мне 0 вместо 10.

select (unix_timestamp(2020-03-20 10:00:00:010) - unix_timestamp(2020-03-20 10:00:00:020))

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Отметка времени куста всегда будет выглядеть примерно так:

2020-03-20 01:50:19.158

Чтобы получить разницу между двумя отметками времени, вы можете попробовать выполнить следующий запрос:

select date_format("2020-03-20 10:00:00.020",'S') -date_format("2020-03-20 10:00:00.010",'S');

Если часть миллисекунды равна разделенные ":", тогда вы можете получить разницу, запустив следующий запрос:

select cast(substr("2020-03-20 10:00:00:020",-3) as int) -  cast(substr("2020-03-20 10:00:00:010",-3) as int);
1 голос
/ 20 марта 2020

Это потому, что unix_timestamp обрезает миллисекундную часть. Вам нужно некоторое регулярное выражение для его анализа - что-то вроде:

select cast(regexp_replace('2020-03-20 10:00:00:020', 
                           '(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2}):(\\d{3})',
                           '$1-$2-$3 $4:$5:$6.$7') as timestamp);

ИЛИ

SELECT ROUND((CAST(CAST('2020-03-20 10:00:00.020' AS TIMESTAMP) AS DOUBLE) 
            - CAST(CAST('2020-03-20 10:00:00.010' AS TIMESTAMP) AS DOUBLE)) * 1000)
as timediff

Миллисекундная часть должна иметь вид гггг-мм-дд чч: мм: сс.SSS возможно, вам придется заменить «:» на «.» за миллисекунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...