sql - 投射特定的小时和分钟并获取时差
问题描述
我有以下内容:
trunc(sysdate - to_timestamp(trunc(sysdate, 'YYYY-MM-DD') || ' 12:30', 'YYYY-MM-DD HH245:MI') * 1440,1)
我想要做的是,使用 sysdate 的日期部分并将 12:30 转换为时间部分。然后计算 sysdate@12:30 和当前 sysdate 之间的差异。
我越来越:
ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
在减号之后。
有任何想法吗?
解决方案
您收到该错误是因为您尝试将时间戳乘以 1440,而不是日期和时间戳之间的差异 - multiplication 的优先级高于 subtraction。您的格式模型中也有HH245
代替HH24
;trunc(sysdate, 'YYYY-MM-DD')
将抛出“ORA-01898: too many precision specifiers”;如果您将其更改为,to_char(sysdate, 'YYYY-MM-DD') || ...
您将从一个日期中减去一个时间戳,这会给您一个间隔,而不是一个数字,并且会抛出一个不同的 ORA-00932 错误。
解决所有这些问题,您最终会得到:
trunc((sysdate - to_date(to_char(sysdate, 'YYYY-MM-DD') || ' 12:30', 'YYYY-MM-DD HH24:MI')) * 1440, 1)
目前对我来说评估为 354.2。
不过,您不需要转换为字符串或从字符串转换。您可以通过以下方式获得今天的 12:30:
trunc(sysdate) + (12.5/24)
wheretrunc(sysdate)
给你今天的午夜,而 12.5/24 给你一天的一小部分,持续 12.5 小时。然后,您可以从当前时间中减去它:
sysdate - (trunc(sysdate) + (12.5/24))
要获得天数的差异,然后将该结果乘以 1440 的分钟数,并截断到一个小数位。
当前日期和今天 12:30 的快速演示以及三种方式的区别:
select sysdate,
trunc(sysdate) + (12.5/24) as "12:30",
sysdate - (trunc(sysdate) + (12.5/24)) as diff_days,
(sysdate - (trunc(sysdate) + (12.5/24))) * 1440 as diff_mins,
trunc((sysdate - (trunc(sysdate) + (12.5/24))) * 1440, 1) as result
from dual;
SYSDATE 12:30 DIFF_DAYS DIFF_MINS RESULT
------------------- ------------------- ---------- ---------- ----------
2019-08-14 18:24:16 2019-08-14 12:30:00 .246018519 354.266667 354.2
正如@GordonLinoff 暗示的那样,今天12:30 部分可以通过间隔而不是小数天来实现,例如:
trunc(sysdate) + 12.5 * interval '1' hour
或更简单明了:
trunc(sysdate) + interval '12:30' hour to minute
您似乎希望将最终结果作为分钟数,但您也可以通过将当前天数中间结果(或分钟数)转换为numtodsinterval()
:
numtodsinterval(sysdate - (trunc(sysdate) + interval '12:30' hour to minute), 'DAY')
这有点令人费解,或者直接:
select systimestamp,
systimestamp - trunc(sysdate) - interval '12:30' hour to minute as result
from dual;
SYSTIMESTAMP RESULT
------------------------------------ -------------------
2019-08-14 18:24:16.830116000 +01:00 +00 05:54:16.830116
推荐阅读
- r - 带有 Rmarkdown 网站的左侧菜单
- c# - IOS 推送通知在使用 PushSharp 时不起作用
- php - Laravel - 查找登录用户的用户 ID 并从另一个表中获取值
- ssl - 为什么无法远程访问 glassfish 管理控制台?
- typescript - Karma 中的源映射 TypeScript
- php - 无法加载动态库 'zip' php - ArchLinux
- c# - 返回 0 的数据表。位置 2 处没有行 ASP.NET
- azure - Microsoft Azure 认知服务 LUIS 未显示用户在审阅端点话语中输入的内容
- javascript - 如果任何用户在页面上,则锁定表单
- ios - 如何以编程方式复制 UIView 并保存accessibilityId?