如何在我的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'