Найти записи в SQL, которые были сделаны миллисекунды друг против друга - PullRequest
1 голос
/ 03 мая 2019

Мне нужно отладить обнаруженную мной проблему с чужим кодом, где он читает и идентификатор, и метку времени для ключа. Но я заметил, что это не чтение миллисекундной информации. Хотя это потенциальная причина, это не подтверждено, и мне нужно выяснить, является ли это причиной.

Проблема может возникнуть, если две записи в таблице произошли в одну и ту же секунду, 10: 20: 05.0500 и 10: 20: 05.5000, но не в 10: 20: 05.5000 и 10: 20: 06.0500.

Как мне написать такой запрос для поиска?

Я использую Oracle pl / sql.

Ответы [ 2 ]

1 голос
/ 04 мая 2019

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

SELECT A.ts, B.ts
FROM
    Test A
    INNER JOIN Test B
        ON TO_CHAR(A.ts, 'YYYY-MM-DD HH24:MI:SS') = TO_CHAR(B.ts, 'YYYY-MM-DD HH24:MI:SS')
WHERE
    A.ts < B.ts
ORDER BY
    A.ts, B.ts;

TO_CHAR усекает миллисекунды.Это важно, потому что функции этого раунда могут давать разные секунды.Например, CAST(ts as timestamp(0)) раундов, а это не то, что нужно.

В примере по ссылке ниже есть запись с 999 миллисекундами для проверки этого.

См. Пример в SQL Fiddle..

1 голос
/ 03 мая 2019

В Oracle для использования долей секунды столбец должен иметь тип данных " TIMESTAMP ".

Возможно, чужой код использует переменную типа ДАТА , то есть год-месяц-день час-минута-секунда без дробных секунд.

Справочник по языку базы данных SQL: типы данных

Можете ли вы дать описание таблицы и чужой код?

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