如何在我的SQL查询中包含时间来查找两个日期之间的数据?

如何在我的SQL查询中包含时间来查找两个日期之间的数据?,sql,oracle,Sql,Oracle,我正在尝试获取两个日期之间的数据,应该包括秒数 我目前正在使用下面的代码,效果很好;然而,现在需要更精确地包含时间 where h.creation_time >= date '2017-01-01' and h.CLOSED_TIME >= date '2018-12-16' and h.CLOSED_TIME <= date '2018-12-17' 我应该期待在下午6:19到6:20之间(一分钟的时间范围)的结果。相反,它是在吐出错误: ORA-01861:文字与格式

我正在尝试获取两个日期之间的数据,应该包括秒数

我目前正在使用下面的代码,效果很好;然而,现在需要更精确地包含时间

where h.creation_time >= date '2017-01-01'
and h.CLOSED_TIME >= date '2018-12-16' and h.CLOSED_TIME <= date '2018-12-17' 
我应该期待在下午6:19到6:20之间(一分钟的时间范围)的结果。相反,它是在吐出错误:

ORA-01861:文字与格式字符串不匹配


尝试使用
将它们显式转换为\u date()


尝试使用
将它们显式转换为\u date()

下午6:19到6:20之间的所有内容(一分钟时间范围)

这里提出的问题不仅是技术问题,而且是语言问题。“中间”一词可能有几个细微的区别,例如在门柱之间驾驶(即希望汽车不会撞到任何一侧,因此不包括门柱)或在伦敦和巴黎之间飞行,这两个城市都包括在内,否则你就无法到达目的地

SQL标准使用后一种方法进行中间连接,它被定义为包含两个端点。这是日期/时间范围的一个潜在问题,因为它可能导致端点重复计数。正如@mathguy在其关于该问题的精彩评论中所指出的,更严格的方法是避免使用介于之间的,并以这种方式明确定义范围:

WHERE h.creation_time >= to_date('2017-01-01', 'YYYY-MM-DD')
AND h.closed_time >= to_date('2018-12-16 18:19:00', 'YYYY-MM-DD HH24:MI:SS')
AND h.closed_time  < to_date('2018-12-16 18:20:00', 'YYYY-MM-DD HH24:MI:SS')
其中h.creation\u time>=截止日期('2017-01-01','YYYY-MM-DD')
截止日期('2018-12-16 18:19:00','YYYY-MM-DD HH24:MI:SS')
和h.关闭时间<截止日期('2018-12-16 18:20:00','YYYY-MM-DD HH24:MI:SS')
如果
closed\u time
列是
date
数据类型,请使用
to\u date()

如果
closed_time
列是
timestamp
数据类型,请改用
to_timestamp()

下午6:19到6:20之间的所有内容(一分钟时间范围)

这里提出的问题不仅是技术问题,而且是语言问题。“中间”一词可能有几个细微的区别,例如在门柱之间驾驶(即希望汽车不会撞到任何一侧,因此不包括门柱)或在伦敦和巴黎之间飞行,这两个城市都包括在内,否则你就无法到达目的地

SQL标准使用后一种方法进行中间连接,它被定义为包含两个端点。这是日期/时间范围的一个潜在问题,因为它可能导致端点重复计数。正如@mathguy在其关于该问题的精彩评论中所指出的,更严格的方法是避免使用介于之间的,并以这种方式明确定义范围:

WHERE h.creation_time >= to_date('2017-01-01', 'YYYY-MM-DD')
AND h.closed_time >= to_date('2018-12-16 18:19:00', 'YYYY-MM-DD HH24:MI:SS')
AND h.closed_time  < to_date('2018-12-16 18:20:00', 'YYYY-MM-DD HH24:MI:SS')
其中h.creation\u time>=截止日期('2017-01-01','YYYY-MM-DD')
截止日期('2018-12-16 18:19:00','YYYY-MM-DD HH24:MI:SS')
和h.关闭时间<截止日期('2018-12-16 18:20:00','YYYY-MM-DD HH24:MI:SS')
如果
closed\u time
列是
date
数据类型,请使用
to\u date()


如果
closed\u time
列是
timestamp
数据类型,请改用
to\u timestamp()

时间戳文字以关键字
timestamp
开头(就像日期文字以
date
开头一样):

为了考虑秒的分数,您不应该在
之间使用
,但是:

where h.creation_time >= date '2017-01-01'
and h.closed_time >= timestamp '2018-12-16 18:19:00' 
and h.closed_time < timestamp '2018-12-16 18:20:00'
其中h.creation\u time>=日期“2017-01-01”
和h.closed_time>=时间戳'2018-12-16 18:19:00'
和h.closed_时间<时间戳'2018-12-16 18:20:00'

时间戳文字以关键字
时间戳开始(就像日期文字以
日期开始一样):

为了考虑秒的分数,您不应该在
之间使用
,但是:

where h.creation_time >= date '2017-01-01'
and h.closed_time >= timestamp '2018-12-16 18:19:00' 
and h.closed_time < timestamp '2018-12-16 18:20:00'
其中h.creation\u time>=日期“2017-01-01”
和h.closed_time>=时间戳'2018-12-16 18:19:00'
和h.closed_时间<时间戳'2018-12-16 18:20:00'

存储在?@javan.rajpoat中的值的数据类型是什么?@javan.rajpoat将其存储为类型DATEit应该在数据类型DATETIME或TIMESTAMP中,以便按时间和日期进行比较。问题是,
日期
文本仅用于日历日期,而不使用时间组件。
TIMESTAMP
literal可以满足您的需要;不要删除关键字
日期
,而是将其替换为
时间戳
。但这有一个缺点-它依赖于
date
timestamp
数据类型之间的隐式转换。最好将
to_DATE()
与适当的格式模型一起使用,在这种情况下,
'yyyyy-mm-dd hh24:mi:ss'
。尽管问题-
在a和b之间
意味着
=a和=a和
-上限严格不相等。存储在哪个数据类型?@javan.rajpoat中的值存储为类型date。它应该在数据类型DATETIME或TIMESTAMP中,以便按时间和时间进行比较日期。问题是,
Date
literal仅用于日历日期,它不需要时间组件。
TIMESTAMP
literal可以满足您的需要;不要删除关键字
日期
,而是将其替换为
时间戳
。但这有一个缺点-它依赖于
date
timestamp
数据类型之间的隐式转换。最好将
to_DATE()
与适当的格式模型一起使用,在这种情况下
'yyyy-mm-dd hh24:mi:ss'
。问题是-
在a和b之间
意味着
=a和=a和
,上限严格不相等。考虑到我有多少日期,这似乎是最好的解决方案,感谢您的快速反馈!考虑到我有多少约会时间,这似乎是最好的解决方案,谢谢你的快速反馈!
where h.creation_time >= date '2017-01-01'
and h.closed_time >= timestamp '2018-12-16 18:19:00' 
and h.closed_time < timestamp '2018-12-16 18:20:00'