sql - 删除时找不到日期列
问题描述
我有这个不删除任何行的语句。
DELETE FROM mytable
WHERE
datecolumn = sysdate + 100;
但是,正如我所料,下面的删除了 57K 行。为什么会这样?mytable 中的 Datecolumn 存储为 DATE 变量类型。
DELETE FROM mytable
WHERE
to_char(datecolumn, 'DD/MM/YYYY') = to_char(sysdate + 100, 'DD/MM/YYYY');
解决方案
在 Oracle 中date
——尽管它的名字——有一个时间组件。 sysdate
-- 尽管它的名字 -- 也有一个时间组件。
因此,第一个版本正在比较日期和时间,并且没有匹配项。第二个是仅比较日期部分。
请注意,通常不需要将日期转换为字符串。
您可以编写第二个以获得更高的性能:
where datecolumn >= trunc(sysdate) + interval '100' day and
datecolumn < trunc(sysdate) + interval '101' day;
这使得优化器更容易,因为列上没有函数。
推荐阅读
- excel - 对countif vba中的所有变量使用输入框
- clickhouse - 如何在 INTO OUTFILE 子句中指定本地目录?
- xamarin - 更改控件模板时如何防止重新加载 xamarin 地图?
- php - wordpress 登录功能无法使用 php
- python - 使用 cumtrapz 将加速度转换为位移
- android - 如何通过单击返回按钮发送数据?
- c++ - ioctl(tcpCnx->get_fd(), I_SRDOPT, RMSGN) coomand 在 LINUX RH7.4 上不起作用
- python - tensorflow 2胶囊网络实现重塑不起作用
- reactjs - 在 React 中,使用 TypeScript,如何使用 RefForwardingComponent 和 forwardRef 将 ref 传递给自定义组件?
- python - VideoWriter 输出损坏的视频文件