从 Oracle 中的时间戳数据类型列中删除数据不起作用
Delete data from Timestamp datatype column in Oracle not working
我已尝试以下 sql 但不知何故我无法删除或 select 数据。 CRDT
是 timestamp
数据类型,我想从 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';
我已尝试以下 sql 但不知何故我无法删除或 select 数据。 CRDT
是 timestamp
数据类型,我想从 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';