暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 连接日期以获取特定日期 \ 时间范围内的数据

askTom 2017-08-31
175

问题描述

好的-我被要求写一份报告,记录第二天17:00和08:00之间的活动。

因此,当查询第二天运行时,我们需要回顾sysdate -1 | | 17:00

我在想用

选择 *
从表上
其中日期 _ 字段介于日期 (trunc(sysdate -1) | | '17:00'),'DD/MM/YYYY HH:Mi')
和TO_DATE(trunc(sysdate) | | '08:00'),'DD/MM/YYYY HH:Mi')

但是我一直在ORA-01858: 在期望数字的地方发现了一个非数字字符。

我不确定是什么原因造成的,除非我的日期创建是错误的。

“日期字段” 是日期类型

专家解答


尝试:

Select *
from table
where date_field >= trunc(sysdate-1) + interval '17' hour
  and date_field < trunc(sysdate) + interval '8' hour;
复制


我假设您实际上想运行报告,以了解在17:00包容性和08:00排他性之间发生的活动,在这种情况下,您不应在两者之间使用。如果您也想包括恰好在08:00:00发生的活动,那么介于两者之间就可以了。上述条件在日期和时间戳之间进行了一些隐式转换,但是它们比日期和varchar2之间的转换便宜。

你的尝试有几个错误。在将TRUNC结果与小时字符串连接之前,您需要将其隐式转换为VARCHAR2。这使得结果依赖于NLS_DATE_FORMAT会话参数。另外,您使用HH而不是hh24。使用VARCHAR2作为中间形式的查询版本应该是这样的:

Select *
from table
where date_field >= to_date(to_char(sysdate-1,'YYYYMMDD')||'17:00','YYYYMMDDHH24:MI')
  and date_field <  to_date(to_char(sysdate,'YYYYMMDD')||'08:00','YYYYMMDDHH24:MI');
复制


请注意,这里不需要TRUNC,因为我们可以通过使用适当的格式来截断时间部分。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论