【问题标题】:Get hour data from date column in oracle从oracle中的日期列获取小时数据
【发布时间】:2013-05-07 09:06:17
【问题描述】:

如何选择两个日期和小时之间的数据。我的 oracle 列日期的格式是:10.04.2006 19:10:37 我可以在两天之间选择:

select date from table where date between '1/1/2011' and '2/1/2011

但我会选择日期列中的小时数,即:

select date from table where date between '1/1/2011 22:00'and '2/1/2011 21:00'我能做什么

【问题讨论】:

  • 10/04 可以是 4 月 10 日或 10 月 4 日
  • 对不起,我耽误了你的时间,谢谢

标签: sql oracle


【解决方案1】:

您可以使用to_date 指定custom date format

where    date between to_date('1/1/2011 22:00', 'DD/MM/yyyy HH24:MI')
                      and to_date('2/1/2011 21:00', 'DD/MM/yyyy HH24:MI')

【讨论】:

    【解决方案2】:

    这是我通常的做法。

    where date between date'2011-1-1'+22/24 and date'2011-1-2'+21/24
    

    在柱子上

    TRUNC(date_col)+hours/24
    

    【讨论】:

    • 浮点数学不精确,这使得它不太适合限制日期范围
    • @Andomar 我从不注意它。你能告诉细节或给我一个例子吗?谢谢
    • 我希望'2011-1-2'+21/24 产生的时间与21:00 略有不同,但无法找到重现它的方法。 SQL Fiddle 不支持to_char(sysdate, 'HH23:MI:SS.FF9')
    • 我从来没有遇到过这样的问题,可能是因为 Oracle 不使用 IEEE 数学,所以它不太容易受到浮点问题的影响。 sysdate 当然是一个日期,所以你不能从中提取几分之一秒,并且根据 sqlfiddle,所需的最小数值增量是 1/(24*60*60) = 0.000011574074,或者根据我的 Ubuntu 计算器,是 0.000011574。跨度>
    • @DavidAldridge 感谢您的解释,我尝试了这个 sql SELECT CASE WHEN TO_DATE('2011-1-1 22:33:04','YYYY-MM-DD HH24:MI:SS' )=DATE'2011-1-1'+22/24+33/24/60+4/24/60/60 THEN 1 ELSE 0 END FROM DUAL;它返回1。所以我认为我不需要修改我之前开发的程序...... lol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2022-01-25
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多