IT序号网

sql之比较 Oracle 中的时间戳

yxwkf 2024年11月01日 编程语言 11 0

我有一个列用于将日期和时间数据存储在我的 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' 开始,这是不可能的。

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!