Sql Oracle强制转换(时间戳为日期)

Sql Oracle强制转换(时间戳为日期),sql,oracle,timestamp,Sql,Oracle,Timestamp,我在甲骨文中看到了不一致之处。 将时间戳数据类型值插入日期数据类型列的方式与CAST(时间戳为日期)的工作方式不一致 INSERT似乎只是在CAST将时间戳值舍入到最接近的秒数时,将时间戳值中的毫秒数切掉 例如: 临时表 create table test_timestamp_to_date (date_col date, timestamp_col timestamp(6)); 插入: insert into test_timestamp_to_date select to_times

我在甲骨文中看到了不一致之处。 将时间戳数据类型值插入日期数据类型列的方式与CAST(时间戳为日期)的工作方式不一致

INSERT似乎只是在CAST将时间戳值舍入到最接近的秒数时,将时间戳值中的毫秒数切掉

例如:

  • 临时表

    create table test_timestamp_to_date 
    (date_col date, timestamp_col timestamp(6));
    
  • 插入:

    insert into test_timestamp_to_date select 
    to_timestamp('11-OCT-2009 2:23:23.793915 PM'),
    to_timestamp('11-OCT-2009 2:23:23.793915 PM')
    from dual;
    
    insert into test_timestamp_to_date select 
    cast(to_timestamp('11-OCT-2009 2:23:23.793915 PM') as date),
    to_timestamp('11-OCT-2009 2:23:23.793915 PM')
    from dual;
    
  • 结果:

    1* select to_char(date_col,'DD-MON-YYYY HH24:MI:SS') date_col, timestamp_col
         from test_timestamp_to_date
    SQL> /
    
    DATE_COL             TIMESTAMP_COL
    -------------------- ----------------------------
    11-OCT-2009 14:23:23 11-OCT-09 02.23.23.793915 PM
    11-OCT-2009 14:23:24 11-OCT-09 02.23.23.793915 PM
    
  • 问题: 在使用CAST时,有没有简单的方法可以避免毫秒的舍入? 我不是说使用TO_CHAR,TO_DATE组合和某些格式;还有别的吗? 与演员的编码已经完成,但我需要一个非常简单的修复

    在使用CAST时,有没有简单的方法可以避免毫秒的舍入

    不,是那个。仅在该数据类型中无法满足您的要求。

    任何感兴趣的人。 我刚想出来

    ORACLE CAST函数中存在一个缺陷,使得在SQL中使用CAST时与在PL/SQL中使用CAST时表现不同

    CAST函数在SQL中错误地舍入分数,并在PL/SQL中正确地截断它们

    正如我们看到的,PL/SQL的行为方式与“默认”转换(插入日期选择时间戳)相同,这意味着“默认”转换也可以正常工作

    该缺陷在11gR2中已修复,并且有一个补丁可用于10g

    SQL的CAST应该(并且将在补丁之后)截断分馏值,而不是取整它们


    谢谢。

    谢谢您的回复。不过,日期数据类型显然没有小数秒。我想我的问题是,是否有人知道为什么ORACLE在“默认情况下”(插入到日期选择时间戳)时,从时间戳到日期的转换会有所不同,在这种转换中,分数被简单地删除(即使毫秒是0.999999),而在CAST函数中分数被舍入到下一秒(如果毫秒超过0.5秒)或前一秒(如果毫秒小于0.5秒)。抱歉,如果我不清楚这个问题。谢谢。我还想知道是否有人知道在使用CAST时避免这种舍入的简单方法。谢谢你的回答。但是,很明显,日期数据类型没有小数秒。我想我的问题是,是否有人知道ORACLE为什么要从时间进行转换“默认情况下”(插入日期选择时间戳)时,标记日期的方式不同,此时只需删除分数(即使毫秒为0.999999),而CAST函数中分数四舍五入到下一秒(如果毫秒超过0.5秒)或前一秒(如果毫秒小于0.5秒)。如果我不清楚这个问题,很抱歉。谢谢。我还想知道是否有人知道在使用“谢谢”时避免这种舍入的简单方法。