从 Oracle 中的时间戳数据类型列中删除数据不起作用

Delete data from Timestamp datatype column in Oracle not working

我已尝试以下 sql 但不知何故我无法删除或 select 数据。 CRDTtimestamp 数据类型,我想从 table 中的 CRDT = '2021-03-13 14:00:01' 中删除数据。下面是我的 sql,它不起作用:

DELETE from TST_EP
where CRDT = TO_TIMESTAMP('2021-03-13 14:00:01');

请定义“不工作”。

猜测您收到一条错误消息,首先是因为您没有用单引号括起时间戳的字符串表示形式。

修复该问题后,您需要提供格式掩码,以便 oracle 知道如何解释时间戳的字符串表示形式'

DELETE from TST_EP
where CRDT = TO_TIMESTAMP('2021-03-13 14:00:01','yyyy-mm-dd hh24:mi:ss');

如果这不能解决您的问题,那么您需要更明确地说明“不起作用”。

以及使用 4 位数年份的荣誉。我一直对继续重现 Y2k 错误的 duh-velopers 的数量感到震惊。

最可能的解释是你的TIMESTAMP定义了小数秒。

举个小例子

select crdt from tab;
CRDT               
-------------------
25.03.2021 15:58:48

所以你在 table 中有一行 TIMESTAMP,让我们尝试 select 它

select count(*) from tab
where crdt = TO_TIMESTAMP('25.03.2021 15:58:48','dd.mm.yyyy hh24:mi:ss');
  COUNT(*)
----------
         0
     

解决方案是用小数秒显示完整的 TIMESTAMP

select to_char(crdt,'DD.MM.YYYY HH24:MI:SSXFF') crdt from tab;

CRDT                         
-----------------------------
25.03.2021 15:58:48,116000

现在,当使用完整的 TIMESTAMP 时,您会得到匹配项。

select count(*) from tab
where crdt = TO_TIMESTAMP('25.03.2021 15:58:48,116000','DD.MM.YYYY HH24:MI:SSXFF');

  COUNT(*)
----------
         1

另一个问题可能与*时区*有关,但这不应该是你的情况,因为你使用数据类型TIMESTAMP,即没有时区.

你没有解释“不工作”是什么意思,但是,如果你在匹配小数秒时遇到问题,那么你可以使用以下方法将向下匹配到最接近的秒:

DELETE FROM TST_EP
WHERE CRDT >= TIMESTAMP '2021-03-13 14:00:01'
AND   CRDT <  TIMESTAMP '2021-03-13 14:00:02';