首页 > 解决方案 > 在 sql 中查找彼此在毫秒内完成的条目

问题描述

我需要调试我在其他人的代码中发现的问题,它会读取密钥的 id 和时间戳。但是,我注意到它没有读取毫秒信息。虽然这是一个潜在的原因,但这没有得到证实,我需要找出这是否是原因。

如果表中的两个条目发生在同一秒内,即 10:20:05.0500 pm 和 10:20:05.5000 pm,而不是 10:20:05.5000 和 10:20:06.0500,则可能会出现问题。

我如何编写这样的查询来查找它?

我正在使用 Oracle pl/sql。

标签: sqloracle

解决方案


要查找具有相同日期/时间(达到秒精度但具有不同毫秒)的记录,您可以通过将表连接到自身来比较不同的记录

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 上的示例


推荐阅读