gpt4 book ai didi

sql - 比较 Oracle 中的时间戳

转载 作者:行者123 更新时间:2023-12-02 07:22:26 25 4
gpt4 key购买 nike

我有一个列用于将日期和时间数据存储在我的 Oracle 11g Express 数据库中的 VARCHAR2 列中,格式为:

2016 年 9 月 30 日 14:00:00

我正在尝试获取不同时间范围内的数据的方法。我发现了以下两种方式:

select * 
from dummy
WHERE starttime > '9/30/2016 14:00:00'
AND starttime < '9/30/2016 17:00:00'
order by starttime;

select *
from dummy
WHERE to_timestamp(starttime, 'mm/dd/yyyy hh24:mi:ss') > TO_TIMESTAMP('9/30/2016 14:00:00', 'mm/dd/yyyy hh24:mi:ss')
AND TO_TIMESTAMP(starttime, 'mm/dd/yyyy hh24:mi:ss') < TO_TIMESTAMP('9/30/2016 17:00:00', 'mm/dd/yyyy hh24:mi:ss');

我想知道第一种方法如何工作,因为列开始时间以 VARCHAR 格式存储,并且在不转换为时间戳的情况下比较仍然有效。有人可以向我解释如何/为什么会发生这种情况,或者是否存在某些无法解决的极端情况?谢谢。

最佳答案

之所以可行,是因为您对月份和年份或一位数天数与两位数天数没有任何问题。想一想“9/30/2016 14:00:00”到“9/30/2016 17:00:00”范围内的任何字符串。它们都必须以“9/30/2016 1”开头。

如果在范围内,比如“9/30/2016 14:00:00”到“10/30/2016 17:00:00”,你根本找不到任何记录,因为字符串会有从 >= '9' 和 <= '1' 开始,这是不可能的。

因此,正是特定日期内的窄幅波动让您在这里 :-)

关于sql - 比较 Oracle 中的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com