【问题标题】:Not able to Delete records on sysdate in oracle无法在 oracle 中删除 sysdate 上的记录
【发布时间】:2023-12-02 05:44:01
【问题描述】:

我一直在尝试从表中删除当前日期为 oracle 中 sysdate 的记录。您可以参考我尝试过的下图

表格结构和插入的数据

查询记录

正如您在第一张图片中看到的,updated_date 的类型是日期。当我进行插入时,数据会使用 sysdate 插入,但是当我尝试选择/删除时,它在第二个图像中不起作用。

起初,我认为可能是由于时间变化可能导致了这种情况,但类型是日期,甚至我尝试将其格式化为 dd-mon-yy 所以不应该是这种情况

【问题讨论】:

  • 从不,永远不要在已经是日期的值上调用 to_date()。这将首先将date 值转换为varchar,然后将varchar 转换回最初的date
  • 你想要trunc(updated_date) = trunc(sysdate)
  • 我尝试了 to_date,因为我认为时间变化会是原因,所以 to_date(updated_date,'dd-mon-yy') 应该有效,但只是 din 甚至认为左操作数也需要一个to_date(updated_date,'dd-mon-yy')/trunc 插入时
  • 再次:从不使用已经是日期(或时间戳)的参数调用to_date()。这是完全错误的。
  • 是的,我的意思是我应该在两边都使用 trunc,是的,通过 to_date() 再次转换日期是没有意义的。谢谢老兄。

标签: oracle


【解决方案1】:

DATE数据类型有时间分量,在你的工具中没有显示。

DATE

DATE 数据类型将时间点值(日期和时间)存储在表中。 DATE 数据类型存储年(包括世纪)、月、日、小时、分钟和秒(午夜之后)。

您需要同时截断 SYSDATEupdated_date 列。

SELECT * FROM EMPL WHERE TRUNC(updated_date) = TRUNC(SYSDATE);

要检查“真实价值”,您应该更改NLS_DATE_FORMAT

alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS';
SELECT * FROM EMPL;

【讨论】:

  • 是的,你是对的,我在比较运算符的右侧尝试过,但在左侧没有尝试过。时间变化是插入后值发生变化的唯一原因。谢谢!
最近更新 更多