我需要调试一个在别人的代码中发现的问题,该问题会同时读取ID和密钥的时间戳。但是,我注意到它没有读取毫秒信息。虽然这是一个潜在原因,但尚未确认,我需要找出是否是原因。
如果表中的两个条目在同一秒内10:20:05.0500 pm和10:20:05.5000 pm发生,但不是10:20:05.5000和10:20:06.0500,则可能会发生此问题。
如何编写这样的查询来查找它?
我正在使用Oracle pl / sql。
答案 0 :(得分:1)
在Oracle中,要使用小数秒,列的数据类型必须为“ TIMESTAMP ”。
也许其他人的代码正在使用类型为 DATE 的变量,该变量是年-月-日时分-秒,无小数秒。
Database SQL Language Reference: Data Types
您能提供表格说明和其他人的代码吗?
答案 1 :(得分:1)
要查找具有相同日期/时间(秒精度)但具有不同毫秒数的记录,可以通过将表自身连接起来来比较不同的记录
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毫秒来进行测试。