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

从Oracle中的时间戳数据类型列中删除数据不工作,oracle,date,timestamp,sql-delete,Oracle,Date,Timestamp,Sql Delete,我尝试了以下sql,但不知何故,我无法删除或选择数据。CRDT是时间戳数据类型,我想从CRDT='2021-03-13 14:00:01'的表中删除数据。下面是我的sql,它不工作: DELETE from TST_EP where CRDT = TO_TIMESTAMP('2021-03-13 14:00:01'); 请定义此选项不起作用 我猜您会收到一条错误消息,首先是因为您没有关闭时间戳字符串表示形式周围的单引号 在解决这个问题之后,您需要提供一个格式掩码,以便oracle知道如何解释时

我尝试了以下sql,但不知何故,我无法删除或选择数据。CRDT是时间戳数据类型,我想从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开发者的数量感到震惊。

最可能的解释是,您的时间戳定义为小数秒

这里有一个小例子

select crdt from tab;
CRDT               
-------------------
25.03.2021 15:58:48
因此,表中有一行带有此时间戳,让我们尝试选择它

select count(*) from tab
where crdt = TO_TIMESTAMP('25.03.2021 15:58:48','dd.mm.yyyy hh24:mi:ss');
  COUNT(*)
----------
         0
     
解决方案是用小数秒显示完整的时间戳:

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

CRDT                         
-----------------------------
25.03.2021 15:58:48,116000
现在,当使用完整的时间戳时,您将获得匹配

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

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

*时区*可能存在另一个问题,但这不应该是您的情况,因为您使用的是数据类型时间戳,即没有时区。

您没有解释不工作的含义,但是,如果您遇到匹配分数秒的问题,则可以使用以下方法将其匹配到最接近的秒:

从TST_EP中删除 其中CRDT>=时间戳“2021-03-13 14:00:01” CRDT<时间戳'2021-03-13 14:00:02';
我首先尝试选择查询,但没有检索到行,因此无法运行…在我的表中,该值存储在CRDT中为'2021-03-13 14:00:01'@Symonds-您说过CRDT是时间戳数据类型。如果这是真的,是吗?你怎么查到的?那么它就不会存储为2021-03-13 14:00:01。当您选择它时,它可能会以这种方式显示,但存储是指Oracle在内部如何表示它,而且它并不像存储在字符串表示中那样简单。@EdStevens我只是在检查表中的值……我现在真的不明白为什么它选择带有日期时间戳的行,它现在在where子句中使用这个条件:truncCRDT=TO_DATE'2021-03-13',“YYYY-MM-DD”我现在试着这样做,但得到的错误是“ORA-01830:日期格式图片在转换整个输入字符串之前结束”选择*从TST_EP,其中crdt=TO_时间戳“13.03.2021 14:00:01116000”,“DD.MM.YYYY HH24:MI:SSXFF”;你能从我的例子中说明我该怎么做吗?@Symonds——Marmite Bomber答案中的逗号是十进制逗号——显然他一定是在欧洲某地或其他使用十进制逗号的地方写的。很明显,您所在的位置使用的是小数点,而不是逗号-因此请重试,但请使用14:00:01.116000中的小数点。除此之外,这只是一个例子。尝试通过从具有该格式模型的表中选择时间戳来查看数据中的内容,以查看实际数据时间戳的外观。是的,现在没有错误,但不幸的是没有检索到行…我不明白为什么?@Symonds-首先在不使用where子句的情况下运行查询,只是想看看数据中的时间戳是什么样子。如果您担心表太大,这将花费大量时间,只需在下面添加rownum,其中rownum是我的sql,它不起作用不起作用不是对问题的建设性描述,因为它没有告诉我们它是如何起作用的。请将您的问题包含在表的DDL CREATE TABLE语句中;DML INSERT语句用于复制您的问题的一些示例数据;错误消息的全文;以及你预期的行为。