繁体   English   中英

Oracle-SQL中的日期是否始终为00:00:00?

[英]Is a date in Oracle-SQL without a time-value always 00:00:00?

Heyho,

我需要从日期A 00:00:00和日期B 00:00:00(在这种情况下日期A:16.07.2010日期B:20.07.2010)完成的操作中获取一些数据,所以我写了这个选择 - 声明:

Select avg(cnt),fext from (
        Select 
            to_char(mytable.dateadded, 'DD.MM.YYYY') dateadded,
            fext, 
            count(id) cnt 
        from mytable 
        where dateadded between
            to_date('16.07.2010', 'dd,MM,YYYY') and 
            to_date('20.07.2010', 'dd,MM,YYYY')
        group by 
            to_char(mytable.dateadded, 'DD.MM.YYYY'),
            fext)
group by fext;

原始(和工作)声明具有:

    to_date('16.07.2010 00:00:00', 'dd,MM,YYYY HH24:Mi:SS') and 
    to_date('20.07.2010 00:00:00', 'dd,MM,YYYY HH24:Mi:SS')

所以问题是:是吗?

    to_date('16.07.2010', 'dd,MM,YYYY') and 
    to_date('20.07.2010', 'dd,MM,YYYY')

已经将时间A和B设置为00:00:00?

格尔茨

如果您没有指定日期的时间部分,那么它将是00:00:00。

如果你担心时间部分你总是可以截断时间部分:

Trunc(to_date('16.07.2010', 'dd.MM.YYYY')) and 
Trunc(to_date('20.07.2010', 'dd.MM.YYYY'))

最简单的方法是使用ANSI日期文字,它不允许指定时间,因此在内部使用00:00:00时间部分:

dateadded between date '2010-07-16' and date '2010-07-20'

您的表达式看起来很奇怪,因为您的日期字符串有点作为时间组件分隔符,但您的日期格式有逗号。 Oracle接受了它:

rwijk@XE> select to_date('16.07.2010', 'dd,MM,YYYY') from dual;

TO_DATE('16.07.2010
-------------------
16-07-2010 00:00:00

1 row selected.

我简单地使用ANSI日期文字。

问候,Rob。

这个查询将返回一行,我想回答你的问题:

SELECT TO_DATE('16.07.2010 00:00:00', 'dd,MM,YYYY HH24:Mi:SS'),  
       TO_DATE('16.07.2010', 'dd,MM,YYYY')
  FROM dual
 WHERE to_date('16.07.2010 00:00:00', 'dd,MM,YYYY HH24:Mi:SS') = to_date('16.07.2010', 'dd,MM,YYYY')  

这是SQL一致的一件事 - 如果你没有在包含时间部分的DATE数据类型上提供时间部分(IE Oracle,PostgreSQL,而MySQL和SQL Server明确地称它为DATETIME),那么时间部分是默认为该日期的正午夜 - 00:00:00。 在午夜,这意味着日期的开始 - 如果你想在日期比较中包括整个日期,那么价值的时间部分必须是23:49:49 - 秒到午夜。

23:59:59是第二个到午夜。 基本上午夜被定义为一天的开始:00:00:00。 然后是秒钟,直到一天结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM