sql - Oracle - 使用 sysdate 的错误结果
问题描述
我有以下查询。此查询不返回任何结果:
select snap_id from perfstat.stats$snapshot where snap_time = sysdate;
no rows selected
但是如果我格式化 snap_time 和 sysdate 我会收到结果:
select snap_id
from perfstat.stats$snapshot
where to_char(snap_time,'dd/mm/yyyy') = to_char(sysdate,'dd/mm/yyyy');
SNAP_ID
----------
1
2
3
我的查询有问题吗?为什么我需要在这种情况下格式化日期?
obs:snap_time 列是日期类型。
解决方案
查询的where
子句不相同。
第一个查询尝试匹配snap_date
当前日期和时间。这不太可能成功,除非在执行查询的同一秒创建快照。
第二个查询将日期部分snap_date
与当前日期进行比较(不考虑时间部分)。
这:
where to_char(snap_time,'dd/mm/yyyy') = to_char(sysdate,'dd/mm/yyyy')
其实意思是:
where trunc(snap_time) = trunc(sysdate)
哪个可以(并且应该)优化为更清晰,更有效:
where snap_time >= trunc(sysdate)
推荐阅读
- python - PyGame:围绕角色创建矩形,而不是图像
- sql - 如何推断从一种状态转换到另一种状态的指标?
- python-3.x - 如何检查 MongoDB 集合中的字典中是否存在键、值对
- python - Python 图形
- c# - AsyncFunction().GetAwaiter().GetResult() 和 Task.Run(() => AsyncFunction).GetAwaiter().GetResult() 有什么区别?
- mariadb - MariaDB CONCAT / GROUP_CONCAT
- python - gzip API 响应问题(python)
- python - 使用字典理解过滤 django 模型
- python - 将 2d Numy 数组添加到 1d Numpy 数组
- microsoft-graph-api - 特定日历的奇怪确定性“服务不可用”错误